Skip to content

ES6 给数组加了什么? ​

新增的是不改原数组的转换方法,以及真正按空位语义工作的静态方法。业务里优先用这些方法表达「得到一个新数组」,而不是先拷贝再 splice。

原理 ​

Array.from 把可迭代对象或类数组变成数组,第二个参数相当于 map。Array.of 按参数建数组,Array.of(3) 是 [3],而 Array(3) 是三个空位。

查找和判断:find、findIndex、includes、some、every。展平:flat、flatMap。填充和复制:fill、copyWithin,这两个会改原数组。

展开运算符 [...list] 只展一层。要深展平用 flat(Infinity),并确认嵌套深度是可信的。

keys、values、entries 返回迭代器,配合 for...of。它们会走到空位,和 forEach 跳过空位不同。

追问 ​

Array.from 和展开谁好?

两者都能吃可迭代对象。Array.from 能同时做映射,也接受类数组(有 length 和下标)。字符串用展开或 Array.from 都能按码点拆,比 split("") 安全。

includes 和 indexOf 呢?

includes 用的是 SameValueZero,能找到 NaN。indexOf 用严格相等,NaN 永远找不到。

易错点 ​

  • fill 和 copyWithin 会改原数组。
  • 展开对象不是数组展开。对象用的是对象展开,数组展开只对可迭代对象。
  • flat 的默认深度是 1,不是全部展平。

相关 ​