1、Array.prototype.flat() / Array.prototype.flatMap()
flat()可以将数组进行结构,如下所示:
[1,2,[3,4]].flat(); //[1,2,3,4]
[2,3,5,[6,4,8]].flat(); //[2,3,5,6,4,8]
flatMap()是 Array.prototype.map() 和Array.prototype.flat()的组合,通过对map调整后的数据尝试展平操作,如下所示:
[3, 5, [6, 2]].flatMap(v => {
if (typeof v === 'number') {
return v * 2
} else {
return v.map(v => v * 2)
}
}) //[6, 10, 12, 4]
2、String.prototype.trimStart() / String.prototype.trimEnd()
String.prototype.trim()被用于去除头尾上的空格、换行符等,现在通过 trimStart(),trimEnd() 来头和尾进行单独控制。trimLeft()、trimRight() 是同样的用法。
const string = ' hello World ';
string.trimStart(); // 'Hello World '
string.trimEnd(); // ' Hello world'
3、Object.fromEntries()
Object.entries把一个对象转为[key, value]键值对的形式,可以运用于像 Map 这种结构中。而Object.fromEntries()用于把键值对还原成对象结构。如下所示:
const strr = [ ['aaa', 'bbb'] ];
const object = Object.fromEntries(strr); // { aaa: 'bbb' }
4、catch 的参数改为可选
try...catch 错误处理过程中,如果没有给catch传参数的话,代码就会报错。ES10中可以省略catch绑定的参数和括号。如下所示:
const Jsonll = json => {
try {
JSON.parse(json);
return true;
} catch {
return false;
}
};
5、Symbol.description
Symbol是ES6中引入的基本数据类型,可以用作对象属性的标识符。描述属性是只读的,可用于获取符号对象的描述,更好了解它的作用。如下所示:
const symbol = Symbol('Symbol');
symbol; // Symbol(Symbol)
Symbol.description; // 'Symbol'
6、Array.prototype.sort() 较之前更加稳定
规范允许不稳定的排序算法,如快速排序。如下所示:
let array = [
{a: 1, b: 2},
{a: 2, b: 2},
{a: 1, b: 3},
{a: 2, b: 4},
{a: 5, b: 3}
];
array.sort((a, b) => a.a - b.a);
// [{a: 1, b: 2}, {a: 1, b: 3}...] / [{a: 1, b: 3}, {a: 1, b: 2}...]
7、重新定义Function.prototype.toString()
一开始时,返回注释、空格和语法详细信息
function /* a comment */ Old() {}
Function.prototype.toString()刚出现时只会返回了函数的主体,但没有注释和空格
Old.toString(); // 'function Old() {}'
现在函数返回的结果与编写函数时相同
Old.toString(); // 'function /* a comment */ Old () {}'
8、JSON Superset
以前的版本中,如果JSON字符串中包含有行分隔符(\u2028) 和段落分隔符(\u2029),那么在解析过程中会报错。
JSON.parse('"\u2028"'); // SyntaxError
现在
JSON.parse('"\u2028"'); // ''
9、JSON.stringify()解析更加清晰
原先
JSON.stringfy('☺')
//"�"
现在
JSON.stringify('\uD83D'); // '"\ud83d"'