检查JS变量是否为null和true

时间:2016-03-16 21:54:13

标签: javascript variables

检查javascript变量是否为空且为真的最佳方法是什么?

例如,假设我有以下代码:

areaint

checkNotNullAndTrue(trueVar)应返回1.

checkNotNullAndTrue(falseVar)应返回0.

checkNotNullAndTrue(someUndefinedVariable)也应返回0.

这是最好的方法吗?还是有更好的方法?

3 个答案:

答案 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;
&#13;
&#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而不是任何真值。