我只在Firefox的JavaScript控制台中尝试过,但以下语句都没有返回true:
parseFloat('geoff') == NaN;
parseFloat('geoff') == Number.NaN;
我只在Firefox的JavaScript控制台中尝试过,但以下语句都没有返回true:
parseFloat('geoff') == NaN;
parseFloat('geoff') == Number.NaN;
当前回答
我在StackOverflow上写了另一个问题的答案,当NaN == null时,另一个检查,但它被标记为重复,所以我不想浪费我的工作。
看看关于NaN的Mozilla开发者网络。
简短的回答
只要使用距离|| 0当你想确保你的值是一个正确的数字或isNaN()检查它。
长回答
NaN (Not-a-Number)是javascript中一个奇怪的全局对象,当某些数学操作失败时,经常返回。
你想检查NaN == null,结果是false。然而,即使NaN == NaN结果为假。
判断变量NaN是否为全局函数的一个简单方法是NaN()。
另一个是x !== x,仅当x为NaN时才成立。(感谢提醒@raphael-schweikert)
但为什么这个简短的答案管用呢?
让我们一探究竟。
当你调用NaN == false时,结果是假的,NaN == true也是一样。
在规范中,JavaScript有一个总是false值的记录,包括:
NaN -不是一个数字 "" -空字符串 False -布尔值为False Null - Null对象 Undefined -未定义的变量 0 -数字0,包括+0和-0
其他回答
我在StackOverflow上写了另一个问题的答案,当NaN == null时,另一个检查,但它被标记为重复,所以我不想浪费我的工作。
看看关于NaN的Mozilla开发者网络。
简短的回答
只要使用距离|| 0当你想确保你的值是一个正确的数字或isNaN()检查它。
长回答
NaN (Not-a-Number)是javascript中一个奇怪的全局对象,当某些数学操作失败时,经常返回。
你想检查NaN == null,结果是false。然而,即使NaN == NaN结果为假。
判断变量NaN是否为全局函数的一个简单方法是NaN()。
另一个是x !== x,仅当x为NaN时才成立。(感谢提醒@raphael-schweikert)
但为什么这个简短的答案管用呢?
让我们一探究竟。
当你调用NaN == false时,结果是假的,NaN == true也是一样。
在规范中,JavaScript有一个总是false值的记录,包括:
NaN -不是一个数字 "" -空字符串 False -布尔值为False Null - Null对象 Undefined -未定义的变量 0 -数字0,包括+0和-0
是(NaN >= 0) ?......“我不知道”。
function IsNotNumber( i ){
if( i >= 0 ){ return false; }
if( i <= 0 ){ return false; }
return true;
}
条件仅在TRUE时执行。
不是假的。
不是"我不知道"
NaN是一个特殊的值,不能这样测试。我想和大家分享一个有趣的事情
var nanValue = NaN;
if(nanValue !== nanValue) // Returns true!
alert('nanValue is NaN');
这只对NaN值返回true,是一种安全的测试方式。肯定应该被包装在一个函数中,或者至少被注释,因为测试相同的变量是否彼此不相等显然没有多大意义,呵呵。
MDN的parseFloat页面中提到了另一个解决方案
它提供了一个过滤器函数来执行严格的解析
var filterFloat = function (value) {
if(/^(\-|\+)?([0-9]+(\.[0-9]+)?|Infinity)$/
.test(value))
return Number(value);
return NaN;
}
console.log(filterFloat('421')); // 421
console.log(filterFloat('-421')); // -421
console.log(filterFloat('+421')); // 421
console.log(filterFloat('Infinity')); // Infinity
console.log(filterFloat('1.61803398875')); // 1.61803398875
console.log(filterFloat('421e+0')); // NaN
console.log(filterFloat('421hop')); // NaN
console.log(filterFloat('hop1.61803398875')); // NaN
然后你可以用isNaN来检查它是否是NaN
发现这很有用
// Long-hand const isFalsey = (value) => { if (
value === null ||
value === undefined ||
value === 0 ||
value === false ||
value === NaN ||
value === "" ) {
return true; } return false; };
// Short-hand const
isFalsey = (value) => !value;