JavaScript真的是什么?

dpp*_*dpp 5 javascript

这个说false,意思""是一个数字:

alert(isNaN("")); 
Run Code Online (Sandbox Code Playgroud)

这个说NaN,意思""是不是数字,不能转换:

alert(parseFloat(""));
Run Code Online (Sandbox Code Playgroud)

我期待第二个代码转换""为,0因为""测试时是一个数字,IsNaN但我错了!我疯了还是我错过了什么?

Esa*_*ija 4

parseFloat尝试从字符串中解析数字,其中 as在检查之前isNaN 将参数转换为数字:

Number("") //0 http://ecma-international.org/ecma-262/5.1/#sec-9.3.1
parseFloat("") //NaN http://ecma-international.org/ecma-262/5.1/#sec-15.1.2.3
Run Code Online (Sandbox Code Playgroud)

显然这是“损坏的”或“令人困惑的”,所以从规格来看:

ECMAScript 代码测试值 X 是否为 NaN 的可靠方法是使用 X !== X 形式的表达式。当且仅当 X 为 NaN 时,结果才为 true。

0 !== 0 // false
NaN !== NaN //true

function isExactlyNaN(x) {
    return x !== x;
}
Run Code Online (Sandbox Code Playgroud)

  • @leppie `isNaN("pepperoni")` 也是如此:) (2认同)