我使用Chrome浏览器60.x,并测试代码isNaN([3])
。
结果是false
,但我无法理解。
[3]
是一个数组,它不是空的。
我认为[3]
是数组对象,而不是数字。
否则isNaN(["ABC"])
的结果为true
。
isNaN([1,2,3])
的另一个结果是true
。
所以我猜javascript引擎强制将数组更改为数组,该数组具有单个元素。
请让我知道数组参数发生了什么isNaN
函数。
参考1:Why is isNaN(null) == false in JS?
ref2:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/isNaN
[编辑]谢谢大家回答。
我理解javascript在比较之前隐式解析了这个值。
我在阅读Nina Scholz的回答时找到了一个有用的链接 比较表:http://dorey.github.io/JavaScript-Equality-Table/
答案 0 :(得分:5)
当您使用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)}`);

答案 1 :(得分:3)
根据equality comparisons and sameness的规则,数组将被转换,首先是toString
,然后转换为数字进行检查。
console.log(isNaN([3]));
console.log(isNaN('3')); // convert with toString to a primitive
console.log(isNaN(3)); // convert to number
答案 2 :(得分:2)
Javascript的工作方式如下:如果函数的参数是一个整数,它会尝试将对象转换为integer
。例如运行
x = increment([3])
将导致x = 4
。因此运行
isNan([3])
将导致false
,因为[3]
转换为3
而3
是一个数字。同样,["ABC"]
无法转换为integer
,因此isNaN(["ABC"]) = true
。此外,javascript无法将[1,2,3]
转换为数字,因为数组中有三个数字,因此
isNaN([1,2,3]) = true
答案 3 :(得分:1)
因为,作为Javascript中的简写,只包含一个数字的数组被认为是可转换为它包含的数字。您可以使用==
3 == [3] // returns true
另外,这也是为什么[0]
是一个假值,而[n]
n
不为零的原因是一个真正的价值,一个可怕的潜在错误来源。
[0] == false // returns true
[1] == false // returns false
答案 4 :(得分:0)
所以我们知道
ctrl.clear = function(evt){
ids = document.querySelectorAll("div.evt"+evt);
angular.forEach(ids, function(elem, key){
id = elem.getAttribute("id");
view_id = document.querySelector("#" + id.replace("{{event}}", id) + " > div.webix_view").getAttribute("view_id");
viewid = view_id.replace('$', '');
var el = document.querySelector("#" + id.replace("{{event}}", id));
if (el && el.getAttribute('type') == 'datepicker')
{
elem = document.querySelector("#" + id.replace("{{event}}", id) + " > div.webix_view > div.webix_el_box > div.webix_inp_static");
elem.setAttribute("id", viewid);
elem.innerHTML = '';
elem.innerText = '';
elem.textContent = '';
}
else
{
document.querySelector("#" + id.replace("{{event}}", id) + " > div.webix_view > *").setAttribute("id", viewid);
$$(viewid).setValue('');
}
});
}
测试数字与带数字的数组的解决方法
isNaN([3]) // returns false
请记住,===表示匹配值 和 类型