我使用Chrome浏览器60.x,并测试代码isNaN([3])。结果是false,但我无法理解。
[3]是一个数组,并且不为空。我认为[3]是数组对象,而不是数字。
否则的结果isNaN(["ABC"])是true。的另一个结果isNaN([1,2,3])是true。因此,我猜想javascript引擎正在将数组强制更改为该数组具有单个元素的数字。
请让我知道isNaN数组参数发生了什么功能。
ref1:为什么在JS中isNaN(null)== false?
ref2:https : //developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/isNaN
[EDIT]谢谢大家的回答。
我了解javascript在比较之前会隐式解析该值。
在阅读Nina Scholz的答案时,我找到了一个有用的链接。
比较表:http : //dorey.github.io/JavaScript-Equality-Table/
使用时,isNaN它尝试将您的输入值解析为number,然后检查它是否为NaN。
看一些例子。
对于具有一个项目的数组,该Number()函数返回一个对象,该对象实际上将第一个项目作为值保存(请参阅参考资料console.log)。对于许多项目,它返回NaN,因此您得到isNaN的结果-> true。
const a = new Number([3]);
console.log(`a is ${a}`);
console.log(`isNaN(a) - ${isNaN(a)}`);
const b = new Number([3,4,5]);
console.log(`b is ${b}`);
console.log(`isNaN(b) - ${isNaN(b)}`);Run Code Online (Sandbox Code Playgroud)