最近 ECMAScript2019,最新提案完成:tc39 Finished Proposals,我这里也是按照官方介绍的顺序进行整理,如有疑问,可以查看官方介绍啦~
另外之前也整理了 【汇总】59篇原创系列汇总(可以点击查看),也包含《ES6/ES7/ES8/ES9系列》。
1. 可选的 catch 绑定
1.1 介绍
在 ECMAScript2019 最新提案中,支持我们在使用 trycatch
错误异常处理时,选择性的给 catch
传入参数。
即我们可以不传入 catch
参数。
正常使用 trycatch
:
-
try {
-
// todo
-
} catch (err){
-
console.log('err:',err)
-
}
在 ES10 中可以这么使用:
-
try {
-
// todo
-
} catch {
-
// todo
-
}
1.2 使用场景
当我们不需要对 catch
返回的错误信息进行处理时,比如:我们对于一些数据处理,经常会出现格式报错,但是我们并不关心这个错误,我们只需要继续处理,或重新请求数据等。
这种情况,我们就可以使用这个新特性,当然,还是需要根据实际情况考虑。
2. JSON.superset
2.1 介绍
- 来源背景:
由于在 ES2019 之前不支持转义行分隔符 ( \u2028
) 和段落分隔符 ( \u2029
) 字符,并且在解析过程中会报错: SyntaxError:Invalidorunexpected token
。
-
const LS = "";
-
const PS = eval("'\u2029'");// SyntaxError: Invalid or unexpected token
- 解决方案:
JSON 语法由* ECMA-404* 定义并由 RFC 7159 永久修复,允许行分隔符 ( \u2028
) 和段落分隔符 ( \u2029
) 字符,直接出现在字符串中。
2.2 使用
在 ES10 中,我们就可以直接使用 eval("'\u2029'");
而不会再提示错误。
3. Symbol.prototype.description
3.1 介绍
在 ES6 中引入 Symbol 这个基本数据类型,可以实现一些数据内省等高级功能。
这次 ES10 中,为 Symbol 类型增加 Symbol.prototype.description
的一个访问器属性,用来获取 Symbol
类型数据的描述信息(description)。
3.2 使用
MDN 上的案例介绍:
-
console.log(Symbol('pingan8787').description);
-
// expected output: "pingan8787"
-
console.log(Symbol.iterator.description);
-
// expected output: "Symbol.iterator"
-
console.log(Symbol.for('leo').description);
-
// expected output: "leo"
-
console.log(Symbol('pingan8787').description + ' and leo!');
-
// expected output: "pingan8787 and leo!"
另外我们也可以这么使用:
-
let pingan = Symbol('pingan8787').description;
-
console.log(pingan === 'pingan8787'); // true
4. Function.prototype.toString
4.1 介绍
在 ES10 之前,我们对一个函数调用 toString()
方法,返回的结果中会将注释信息去除。
在 ES10 之后,函数再调用 toString()
方法,将准确返回原有内容,包括空格和注释等:
-
let pingan8787 = function(){
-
// do something
-
console.log('leo')
-
}
-
pingan8787.toString();
-
/**
-
"function(){
-
// do something
-
console.log('leo')
-
}"
-
*/
5. Object.fromEntries
5.1 介绍
Object.fromEntries
是 ES10 中新的静态方法,用于将键值对列表转换为对象。
Object.fromEntries()
方法接收一个键值对的列表参数,并返回一个带有这些键值对的新对象。
这个迭代参数应该是一个能够实现 @iterator
方法的的对象,返回一个迭代器对象。它生成一个具有两个元素的类数组的对象,第一个元素是将用作属性键的值,第二个元素是与该属性键关联的值。
Object.fromEntries()
是 Object.entries
的反转。
5.2 使用
Object.entries
和 Object.fromEntries()
互转
-
let leo = { name: 'pingan8787', age: 10};
-
let arr = Object.entries(leo);
-
console.log(arr);// [["name", "pingan8787"],["age", 10]]
-
let obj = Object.fromEntries(arr);
-
console.log(obj);// {name: "pingan8787", age: 10}
Map
转化为 Object
-
const map = new Map([ ['name', 'pingan8787'], ['age', 10] ]);
-
const obj = Object.fromEntries(map);
-
console.log(obj); // {name: "pingan8787", age: 10}
Array
转化为 Object
-
const arr = [ ['name', 'pingan8787'], ['age', 10] ];
-
const obj = Object.fromEntries(arr);
-
console.log(obj); // {name: "pingan8787", age: 10}
6. 更友好的 JSON.stringify
6.1 介绍
更友好的 JSON.stringify
,对于一些超出范围的 Unicode 字符串,为其输出转义序列,使其成为有效 Unicode 字符串。
6.2 使用
-
// Non-BMP characters still serialize to surrogate pairs.
-
JSON.stringify('