考虑以下操作:
typeof (1 + undefined) => "number"
现在这个操作:
isNaN(1 + undefined) => true
typeof表示(1 + undefined)的结果应为数字。
然而,if(1 + undefined)的操作不是数字是真的。
这怎么可能?
注意:如果重要的话,我在谷歌浏览器的控制台中进行了测试。
答案 0 :(得分:0)
答案很简单:NaN
是一个数字。
术语“不是数字”并不意味着“不是JavaScript中number
类型的成员”。它是来自相关浮点规范的术语,其中一组位模式共同用于指定“非数字”的值;也就是说,位模式无效。
有点遗憾的是,JavaScript的设计使某些具有数字无意义结果的操作产生NaN
,因为规范中NaN
的要点是指定值避免} EM>。然而,重新审视这个决定为时已晚。
全局isNaN()
函数在执行测试之前总是尝试将其参数转换为number
。因此,它通常用于检查字符串值是否包含可以解释为有效数字的数字。
答案 1 :(得分:0)
因为typeof (1 + undefined)
是typeof NaN
和
typeof NaN === "number" //true
答案 2 :(得分:0)
由于(1 + undefined)
会导致NaN
您获得该行为。请查看以下示例:
var value = 1 + undefined;
console.log('value for (1 + undefined) is ' + value);
var result1 = typeof (1 + undefined);
console.log('typeof (1 + undefined) is ' + result1);
//this result2
var result2 = isNaN(1 + undefined);
console.log('result of isNaN(1 + undefined) is ' + result2);
//is same as
result2 = isNaN(NaN); //as 1 + undefined is NaN
console.log('result of isNaN(NaN) is ' + result2);