javascript - 在 es6+ 中 isFinite([]) 与 isFinite({}) 不同

标签 javascript object

我感兴趣的是为什么将空对象初始化器传递给 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/

相关文章:

javascript - 如何获得两个日期对象之间的小时差?

java - 以表格格式打印对象的 ArrayList

java - JSR-303 类型 java 字段验证是否始终/隐式在字段验证之前运行?

java - 迭代器如何与构造函数一起使用

javascript - Redux 传奇 : Await Promise

javascript - Go 中的 Date.now() 等价物

javascript - Rails Assets 管道

C++ 对象成员整数具有荒谬的值(value)(WTF)

javascript - jQuery/javascript 问题,点击处理程序是异步执行的吗?

javascript - 单击时带有弹出窗口(信息窗口)的 Google map 自定义标记