今日分享详细版ES10(明日分享详细版ES11)

174 阅读2分钟

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"'