我对下面的代码感到困惑:
if(undefined){
//code will not be executed
}
和
if(!undefined){
//code will be executed
}
这是指"未定义"等于false吗?
这里的问题相关,但没有一点以上的情况出来。
这意味着undefined
是一个错误值,错误值列表为:
"" // Empty string
null // null
undefined // undefined, which you get when doing: var a;
false // Boolean false
0 // Number 0
NaN // Not A Number eg: "a" * 2
如果你否定了一个虚假的值,你就会得到真的:
!"" === true
!null === true
!undefined === true
!0 === true
!NaN === true
当你输入一个truthy值时,你会得到一个false:
!"hello" === false
!1 === false
但undefined
不等于false
:
undefined === false // false
undefined == false // false
如果只是为了好玩:
undefined == null // true
在javascript严格模式下,undefined
不是false,但javascript试图将对象或var转换为boolean
值(这在javascript中被称为truthy value),这就是undefined
为false的原因。例如,null也会发生这种情况。
你可以用这个严格的不平等来强迫它:
if(undefined!==false) console.log("Is not false");
请查看以下检查的错误值:
""==false?
Ans: true
null == false?
Ans: false
undefined == false?
Ans: false
0 == false?
Ans: true
NaN == false?
Ans: false
null == NaN?
Ans: false
我们可以看到null == false
、undefined == false
、null == NaN
和NaN == false
不是true
这意味着他们不平等。从以上结果中,我们得到了三个伪值组:
- "错误"组
- Null组和
- NaN组
但一个虚假的负值总是正确的:
!"" === true
!null === true
!undefined === true
!0 === true
!NaN === true
例如:检查dataTitle
变量的true
值
if(dataTitle && (dataTitle != null))
{
console.log('hi');
}
上述语句将检查假组以及空组
检查dataTitle
变量的false
值
if(!dataTitle)
{
console.log('hi');
}
//or
if(dataTitle==null || dataTitle===false)
console.log('hi');
在javascript中,undefined
和null
是在全局作用域上声明的空属性。它们的值不等于CCD_ 18;它们都具有未定义原语的初始值。
undefined == false // false
话虽如此,两者都将在程序真/假评估时产生false
值。在您的示例中,您使用了一个逻辑NOT运算符(MDN):
如果其单个操作数可以转换为true,则返回false;否则,返回真正的
否定运算符首先将undefined
求值为false
,然后将该值否定为true
。你可以大致这样说明这个过程:
if (!(!!undefined)) {
// code will be executed
}