ES 最新特性 (2023)
es6 数组中新增的几个不破坏原数组新特性,解决了在工作中使用 sort、splice 心智负担。爽歪歪
新特性兼容参考【mdn 文档】
Array 新特性
toSorted
toSorted(compareFn) 方法对数组的元素进行排序,并返回排序完成的新数组。默认排序是将元素转换为字符串,然后按照它们的 UTF-16 码元值升序排序。(相对于 sort()来说,属于非破坏性版本)
- compareFn:定义排序顺序的函数
const values = [1, 10, 21, 2];
const sortedValues = values.toSorted((a, b) => a - b);
console.log(sortedValues === values); //引用对比是false
console.log(sortedValues); // [1, 2, 10, 21]
toSpliced
toSpliced(start, deleteCount, …items) 方法可以同时完成多个操作:在数组中给定的索引开始移除指定数量的元素,然后在相同的索引处插入给定的元素。它返回一个操作完的新数组。(相对于 splice()来说,属于非破坏性版本)
- start:从 0 开始计算的索引,表示要开始改变数组的位置
- deleteCount: 指示数组中要从 start 删除的元素数量
- …items: 要添加的 N 个元素
const months = ["Jan", "Mar", "Apr", "May"];
// 在索引 1 处添加一个元素
const months2 = months.toSpliced(1, 0, "Feb");
console.log(months2); // ["Jan", "Feb", "Mar", "Apr", "May"]
// 从第 2 个索引开始删除两个元素
const months3 = months2.toSpliced(2, 2);
console.log(months3); // ["Jan", "Feb", "May"]
// 在索引 1 处用两个新元素替换一个元素
const months4 = months3.toSpliced(1, 1, "Feb", "Mar");
console.log(months4); // ["Jan", "Feb", "Mar", "May"]
// 原数组不会被修改
console.log(months); // ["Jan", "Mar", "Apr", "May"]
toReversed
toReversed() 方法将调用该方法的数组对象的元素以相反的顺序调换,并返回一个新数组。 (相对于 reverse()来说,属于非破坏性版本)
const data = [1, 2, 3, 4, 5];
const reversedData = data.toReversed();
console.log(reversedData === data); //引用对比是false
console.log(reversedData); // [5, 4, 3, 2, 1]
with
with(index, value) 通过返回一个指定索引处的值被新值替换的新数组,来改变数组中指定索引处的值。原数组不会被修改,这使得你可以以链式调用数组方法的方式来对数组进行操作。(非破坏性版本)
- index 要修改的数组索引
- 要分配给指定索引的任何值
const arr = [1, 2, 3, 4, 5];
const withArr = arr.with(2, 6);
console.log(withArr === arr); //引用对比是false
console.log(withArr); // [1, 2, 6, 4, 5]
新迭代方法
Array 支持从尾到头搜索 findLast() findLastIndex()
-
findLast 会返回第一个查找到的元素,如果没有找到,就会返回 undefined
-
findLastIndex 会返回第一个查找到的元素的索引。如果没有找到,就会返回 -1
Hashbang 语法
Hashbang 语法:Unix 的命令行脚本都支持#!命令,又称为 Hashbang。这个命令放在脚本的第一行,用来指定脚本的执行器。Hashbang 就是想为 Java 脚本引入了#!命令,这个命令写在脚本文件或者模块文件的第一行:语法规则是在脚本文件头部增加一行代码: #!/usr/bin/env node
WeakMap 新特性
WeakMap 支持 SymbolA 作为 Keys
有疑问的同学可以私信我、对帮助到同学欢迎大家点赞、收藏评论。