我感兴趣的是为什么将空对象初始化器传递给 isFinite 会导致 False。传递空数组时结果为 True?他们两者导致不同的结果合乎逻辑吗?
Tldr: 是有限的([]);//真的 是有限的({});//错误的 为什么不是两者都正确呢?为什么不都是假的?
最佳答案
当对象转换为数字时,会得到NaN
,因为当对象转换为基元时,会得到[object Object]
,而不能转换为数字。
console.log(Number({}));
当数组转换为数字时,如果数组为空,则结果为 0
(因为当数组转换为基元时,所有元素都通过逗号连接,如 .join(',')
;空数组会生成空字符串,该字符串会被强制为 0)。
console.log(Number([]));
NaN
不被视为有限:
false if the argument is positive or negative Infinity or NaN or undefined; otherwise, true.
因此 isFinite([])
解析为 isFinite(0)
,并且 isFinite({})
结果为 isFinite( NaN)
。
关于javascript - 在 es6+ 中 isFinite([]) 与 isFinite({}) 不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57565546/