!! 检查javascript中未定义的布尔值

!! 检查javascript中未定义的布尔值,javascript,Javascript,这里我们确实有x的值“false”,因此定义了它。这里的问题是,检查未定义是否正确 如果您只想拒绝未定义的,最好使用: var x = false; if (!!x) { // syntactic sugar for x ! =undefined alert('I will not be shown'); } 因为,!!x将忽略其他值,如x=false/x='。简单的真理测试,您可以使用: if (typeof x !== "undefined") { // code } 对

这里我们确实有x的值“false”,因此定义了它。这里的问题是,检查未定义是否正确

如果您只想拒绝
未定义的
,最好使用:

var x = false;

if (!!x) { // syntactic sugar for x ! =undefined
    alert('I will not be shown');
}
因为,
!!x
将忽略其他值,如
x=false
/
x='
。简单的真理测试,您可以使用:

if (typeof x !== "undefined") {
   // code
}

对于
未定义的
(或您正在检查的非
未定义的
),最广泛使用的检查可能是:


正如(我认为)您已经注意到的,您的测试将为任何错误生成一个
true
值,换句话说,对于
null
undefined
0
false
NaN
NaN
,,这些都是毫无意义的

if (typeof x !== "undefined") {
    console.log("x is defined");
}
相对于

if (!!x)
作为由
执行的布尔转换
if
语句的作用完全相同

“技巧”在您想要强制布尔转换并保留结果时非常有用:

if (x)
之后,变量
xIsTruthy
将包含
true
false

当然,

var xIsTruthy = !!x;

x
不是
undefined
null
0
false
NaN
时,将成功。有时这没关系,因为您知道
x
应该是,例如,nothing或object引用。但是,如果您需要更具体的测试,则必须明确地编写。

这取决于您是接受还是拒绝
!!“
和类似的。例如,
typeof(x)!”“未定义”
!!x
不是“x!=未定义的语法糖”。你在哪里听到的?抱歉,我才意识到不是这样的。所以我认为最好的检查方法是(typeof x!=“undefined”)。。。。谢谢“轨道”:
var xIsTruthy = !!x;
if (x)