You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何空对象可作为Array.from参数?是否符合可迭代/类数组要求?

为什么空对象传给Array.from不会报错?

你提到的这个问题,核心在于Array.from的实际处理逻辑比字面定义的“可迭代/类数组对象”更灵活,并不是严格要求参数必须完全符合这两类对象的定义:

  • 首先,Array.from会先尝试判断参数是否实现了Symbol.iterator接口(即可迭代对象),如果是,就按迭代器的规则生成数组;
  • 如果参数没有Symbol.iterator,它会退而求其次,把参数当作类数组对象处理。这时候哪怕对象没有length属性,规范里也会默认将length取值为0,因此会生成一个长度为0的空数组,而不是抛出错误。

举个直观的例子:

// 空对象传入,返回空数组
console.log(Array.from({})); // 输出 []
// 带普通属性但无length的对象,同样返回空数组
console.log(Array.from({ name: "test" })); // 输出 []

简单来说,Array.from对参数的容错性很强,当参数既不是可迭代对象也不是标准类数组对象时,它会默认按“长度为0的类数组”来处理,所以不会抛出错误,只会返回空数组。

内容的提问来源于stack exchange,提问作者Tibrogargan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.28 17:12:06