共计 2508 个字符,预计需要花费 7 分钟才能阅读完成。
一、JSON superset
将 ECMA-262 语法扩展为 JSON 超集
动机
ECMAScript 声称 JSON 是一个子集 JSON.parse,但是(因为已经有详细记录)这是不正确的,因为 JSON 字符串可以包含未转义的 U + 2028 LINE SEPARATOR 和 U + 2029 PARAGRAPH SEPARATOR 字符,而 ECMAScript 字符串则不能
二、Optional catch binding
对 ECMAScript 进行了语法更改,允许 catch 中不写 error 捕获
动机
此提议引入的语法更改允许 catch 省略绑定其周围的括号
原写法
try {
// 尝试使用可能无法实现的 Web 功能
} catch (unused) {
// 支持可能无法实现的 web 功能情况
}
以后可以这样写
try {
// do something
} catch {
//
}
三、Symbol.prototype.description
新增一个 Symbol.prototype.description 方法, 是一个只读属性,它会返回 Symbol 对象的可选描述的字符串
demo
console.log(Symbol(‘desc’).description); // expected output: “desc”
console.log(Symbol.iterator.description); // expected output: “Symbol.iterator”
console.log(Symbol.for(‘foo’).description); // expected output: “foo”
console.log(Symbol(‘foo’).description + ‘bar’); // expected output: “foobar”
四、Function.prototype.toString revision
新增一个 Function.prototype.toString 方法, 返回一个表示当前函数源代码的字符串
1. 语法
function.toString()
2.demo
const fun = (name) => {console.log(name) }
fun.toString() // “(name) => {console.log(name) }”
五、Object.fromEntries ———— 用于将键值对列表转换为对象 (兼容性有点差,chrome 最新的 beta 版才支持)。
新增 Object.fromEntries 属性, 用于将键值对列表转换为对象 1. 语法
const newObject = Object.fromEntries(iterable);
iterable: 类似实现了可迭代协议 Array 或者 Map 或者其它对象的可迭代对象
2.demo
const newObject = Object.fromEntries([[‘a’, 1], [‘b’, 2]]); // {a: 1, b: 2}
const map = new Map().set(‘a’, 1).set(‘b’, 2);
const newObject1 = Object.fromEntries(map); // {a: 1, b: 2}
六、Well-formed JSON.stringify
防止 JSON.stringify 返回格式错误的 Unicode 字符串的提议
七、String.prototype.{trimStart,trimEnd}
新增 String.prototype.trimStart 和 String.prototype.trimEnd 属性, 移除空白字符, 并返回一个新字符串
String.prototype.trimStart
从一个字符串的开端删除空白字段,并返回一个新字符串 1. 语法
str.trimStart();
2.demo
const str = ‘ 我愿是猪 ‘;
const newStr = str.trimStart(); // ‘ 我愿是猪 ‘
String.prototype.trimEnd
从一个字符串的末端删除空白字段,并返回一个新字符串 1. 语法
str.trimEnd();
2.demo
const str = ‘ 我愿是猪 ‘;
const newStr = str.trimEnd(); // ‘ 我愿是猪 ’
八、Array.prototype.{flat,flatMap}
新增 Array.prototype.flat 和 Array.prototype.flatMap 属性, 对数组的内含数组进行展开操作并返回一个新数组
Array.prototype.flat
! 参考资料方法会按照一个可指定的深度递归遍历数组,并将所有元素与遍历到的子数组中的元素合并为一个新数组返回
1. 语法
const newArray = arr.flat(depth)
depth: 需要展开内层数组的层数,默认为 1
2.demo
展开内层数组
/** 默认参数:*/
const array = [1, [2, [3]]];
const array1 = array.flat(); // [1, 2, [3]]
/** 递归展平,直到数组不再包含嵌套数组:*/
const arrayInfinity = array.flat(Infinity); // [1, 2, 3]
/** 此处等同于 */
const array2 = array.flat(2);
移除空项
const array = [1, 2, , 3];
const arrayRemove = array.flat(); // [1, 2, 3]
Array.prototype.flatMap
方法类似与 Array.prototype.map, 但是会展开数组 (只会展开一层)
1. 语法
const new_array = arr.flatMap((currentValue, index, array) => {
// 返回新数组的元素
})
currentValue: 数组中正在处理的当前元素 index: 正在处理元素的索引 array: 正在被处理素组
2.demo
const array = [1, 2, 3];
const new_array = array.flatMap(ele => [ele * 2]) // [2, 4, 6]
const new_array2 = array.flatMap(ele => [[ele * 2]]) // [[2], [4], [6]]
gitub 上修改