检查 JS 变量是否不为 null 和 true
Check JS variable for both not null and true
检查javascript变量是否既不为空又为真的最佳方法是什么?
例如,假设我有以下代码:
var trueVar = true;
var falseVar = false;
function checkNotNullAndTrue(someVar) {
if (someVar != null && someVar) {
return 1;
} else {
return 0;
}
}
checkNotNullAndTrue(trueVar) 应返回 1。
checkNotNullAndTrue(falseVar) 应返回 0。
checkNotNullAndTrue(someUndefinedVariable)也应该返回0。
这是最好的方法还是有更好的方法?
有点
奇怪的问题,因为null
是假的。
return x === true; // not null and 'true';
return x; // return truthy value if x not null and truthy; falsy otherwise
return !!x; // return true if x not null and truthy, false otherwise
return +!!x; // return 1 if x not null and truthy, 0 otherwise
!!x
和!(!x)
一样,把x
投为真或假,然后否定,然后第二次否定。要么是黑客,要么是与Boolean(x)
相同的模式,具体取决于您的世界观。
+<boolean>
会将布尔值转换为数字 1 或 0。
无论如何,有人要求一个神秘的答案,而"true"使用了很多不必要的字符,所以这里是:
return +!!(x === ([!![]]+[])); // 1 if x not null and true; 0 otherwise
只需使用严格相等运算符 ( ===
):
如果操作数严格相等,则标识运算符返回
true
[...] 且没有类型转换。
function checkNotNullAndTrue(v) {
return v === true ? 1 : 0;
}
或
function checkNotNullAndTrue(v) {
return +(v === true);
}
为什么黑客的东西不起作用,有时:
// djechlin's part
write(+!!1); // 1 obviously not true
write(+!![]); // 1 obviously not true
// quentin's part
function test (valid_variable_name) {
if (valid_variable_name) {
return 1;
}
return 0;
}
write(test(1)); // 1 obviously not true
write(test([])); // 1 obviously not true
// my part
var v = true;
write(+(v === true)); // 1 true (the only one, that would work!)
write(+(1 === true)); // 0 false, works
write(+([] === true)); // 0 false, works
function write(x) {
document.write(x + '<br>');
}
由于您在示例中提到的null
(和 undefined
)不是真值,因此测试它们是多余的。
if (valid_variable_name) {
return 1;
}
return 0;
。就足够了。
。或者if (valid_variable_name === true)
是否要测试true
而不是任何真实值。
相关文章:
- 如何在angularJS中编辑时,如果DB中的值为true,则设置复选框,如果值为false,则取消选中复选框
- 数组在递归方法中设置为null
- AngularJS-使用'true'属性
- 字符串在将其传递给另一个活动Android JavaScript时读取Null
- 无法获取属性'selectedIndex'的未定义引用或null引用
- Meteor方法在客户端返回null,在客户端运行的相同方法返回正确的值
- 来自文本输入null的html javascript变量
- delete在Object上效率低下,但在DOM Element's的数据属性,与null out相比
- php代码在textbox更改事件上显示null
- if(foo!==null)的计算结果为true,即使foo为null
- 什么是'true'和'false'和'null'
- 为什么(true>null)在JavaScript中总是返回true
- 检查 JS 变量是否不为 null 和 true
- include_docs=true的CouchDB视图产生doc:null
- 长度正则表达式在null上测试为true
- 为什么“"==在JavaScript中为[null]true
- 解释如果Type(x)是Undefined,返回true.如果Type(x)为Null,则返回true
- Angularjs : make input = null when ng-hide = true
- 添加“;b服务器端":数据表中的true给出错误TypeError:g为null
- Why does `isFinite(null) === true`?