NaN === false=>假,是不是NaN麻痹?NaN === NaN=> false,但!!NaN === !!NaN=> true我一直绞尽脑汁试图解决这个问题.
ale*_*lex 30
false是非常不同的东西,这就是为什么一个人y而不是一个e.;)NaN被指定永远不会等于任何东西.问题的第二部分是比较false === false,这很有趣,true:)Rob*_*obG 12
1.为什么NaN === false => false,是不是NaN麻痹?
ECMA-262中没有定义术语"falsy",这是类型转换将值强制为false的行话.例如
var x = NaN;
if (!x) {
console.log('x is "falsy"');
}
Run Code Online (Sandbox Code Playgroud)
严格相等运算符使用严格相等比较算法来检查参数是否具有相同的类型,并且NaN是类型编号,而false类型为布尔值,因此根据类型计算它们不相等,没有值的比较.
2.为什么NaN === NaN => false,但是!! NaN === !! NaN => true
因为严格的相等比较算法表明了这一点NaN !== NaN,因此是isNaN方法.
用!使用抽象ToBoolean方法将参数强制!NaN
转换为boolean ,其中转换为true并!!NaN转换为false,因此:
!!NaN === !!NaN --> false === false --> true
Run Code Online (Sandbox Code Playgroud)
请注意,抽象等式运算符==将根据抽象等式比较算法的规则将参数强制为相同的类型.在这种情况下,NaN是类型编号,因此使用返回的toNumber将false转换为数字.而且不等于NaN所以:00
NaN == false --> NaN == 0 --> false
Run Code Online (Sandbox Code Playgroud)
这个条件:
NaN === false
Run Code Online (Sandbox Code Playgroud)
总是false因为数字不是布尔值。要测试某个值是否为假,您可以使用三元表达式:
NaN ? "truthy" : "falsy" // falsy
Run Code Online (Sandbox Code Playgroud)
为什么 NaN === NaN => false
MDN对此进行了解释;但从实用角度来说,两个你只知道它们不是数字的值在逻辑上不可能是同一件事。
...但是为什么 !!NaN === !!NaN => true
这是因为转换NaN为布尔值将使它false和布尔值可以正常进行比较。
| 归档时间: |
|
| 查看次数: |
15482 次 |
| 最近记录: |