我通常使用双按位NOT(~~
)来代替Math.floor
。最近,我发现与NaN
一起使用时,它将返回0
:
console.log(~~NaN)
经过一番调查,我发现根据ECMAScript 2015 specs,按位不使用ToInt32
内部...
让 oldValue 为ToInt32(GetValue( expr ))。
... by its turn:
如果数字为NaN,+ 0,-0,+∞或-∞,则返回+0。
这说明了我的代码段~~NaN --> ~~0 --> ~-1 --> 0
中的顺序。但是,对我来说,0
对于NaN
似乎是一个奇怪的选择。
我的问题:规范为什么选择0
作为ToInt32(NaN)
的返回值?可以说“因为NaN是虚假的” ,但+∞或-∞并非如此。我最好在寻找一些ECMA的书面说明(因此不会基于观点)。
答案 0 :(得分:3)