我对为什么将空的对象初始化程序传递给isFinite会导致False感兴趣。同时传递空数组会导致True?他们俩产生不同的结果是否合乎逻辑?
Tldr:
isFinite([]); //正确
isFinite({}); //错误
为什么都不都是真的?为什么都不都是假的?
最佳答案
将对象转换为数字时,其结果为NaN
,因为将对象转换为基元时,您将获得[object Object]
,而无法将其转换为数字。
console.log(Number({}));
将数组转换为数字时,如果数组为空,则结果为
0
(因为将数组转换为基元时,所有元素都由逗号联接,例如.join(',')
;空数组会导致空字符串,强制为0)。console.log(Number([]));
NaN
不被认为是有限的:因此,
isFinite([])
解析为isFinite(0)
,isFinite({})
生成isFinite(NaN)
。关于javascript - 在es6 +中,isFinite([])与isFinite({})不同,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/57565546/