为何空对象可作为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
相关产品推荐
相关产品推荐

