我对为什么将空的对象初始化程序传递给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/

10-10 00:22