检查javascript变量是否为空且为真的最佳方法是什么?
例如,假设我有以下代码:
areaint
checkNotNullAndTrue(trueVar)应返回1.
checkNotNullAndTrue(falseVar)应返回0.
checkNotNullAndTrue(someUndefinedVariable)也应返回0.
这是最好的方法吗?还是有更好的方法?
答案 0 :(得分:3)
只需使用strict equality operator (===
):
如果操作数严格相等且没有类型转换,则identity运算符返回
true
。
function checkNotNullAndTrue(v) {
return v === true ? 1 : 0;
}
或
function checkNotNullAndTrue(v) {
return +(v === true);
}
为什么hacky东西不起作用,有时候:
// 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>');
}
&#13;
答案 1 :(得分:3)
有点奇怪的问题,因为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
转换为true或false 和否定,然后再次否定。根据您的世界观,黑客或与Boolean(x)
相同的模式。
+<boolean>
会将布尔值转换为数字1或0。
无论如何有人要求一个神秘的答案,“true”使用了很多不必要的字符,所以这里是:
return +!!(x === ([!![]]+[])); // 1 if x not null and true; 0 otherwise
答案 2 :(得分:2)
由于null
(以及您在示例中提到的undefined
)不是真值,因此对它们进行测试是多余的。
if (valid_variable_name) {
return 1;
}
return 0;
......就足够了。
...或if (valid_variable_name === true)
如果你想测试true
而不是任何真值。