为什么这不是null?

时间:2013-06-28 15:55:32

标签: javascript

让我们运行这个javascript代码:

var value = parseInt("");
console.log(value != Number.NaN? value : null);

为什么此代码在控制台中输出Nan而不是null

如何更改代码以实际获取null对象?

我尝试将代码包装在这样的函数中:

function parseIntOrDefault(value, def){
    var candidate = parseInt(value);
    if(candidate != Number.NaN) return candidate; else return def;    
}

console.log(parseIntOrDefault('', null));

但这表现相同。

这是一个说明我的问题的jsFiddle:http://jsfiddle.net/stevebeauge/BRP94/

2 个答案:

答案 0 :(得分:11)

你应该使用

isNaN(value);

检查NaN

由于:

console.log(NaN === NaN); // false!

NaN不等于

这可能看起来很奇怪,但如果你考虑NaN的性质,那就有意义了。

假设你有这段代码:

var a, b, c;
// a = 0;oops a is still undefined so we'll get NaN if we do an operation with it
b = 5;
c = 6
if (a + b === a + c) {
    console.log("math error?");
}

你不想得出5 === 6的看似结论。

答案 1 :(得分:1)

if(isNaN(candidate))return null; else return candidate;