使用typeof和isNaN将结果与(1 + undefined)操作混淆

时间:2018-03-29 13:02:49

标签: javascript google-chrome

考虑以下操作:

typeof (1 + undefined) => "number"

现在这个操作:

isNaN(1 + undefined) => true

typeof表示(1 + undefined)的结果应为数字。

然而,if(1 + undefined)的操作不是数字是真的。

这怎么可能?

注意:如果重要的话,我在谷歌浏览器的控制台中进行了测试。

3 个答案:

答案 0 :(得分:0)

答案很简单:NaN是一个数字。

术语“不是数字”并不意味着“不是JavaScript中number类型的成员”。它是来自相关浮点规范的术语,其中一组位模式共同用于指定“非数字”的值;也就是说,位模式无效。

有点遗憾的是,JavaScript的设计使某些具有数字无意义结果的操作产生NaN,因为规范中NaN的要点是指定值避免。然而,重新审视这个决定为时已晚。

全局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);