前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >喜大普奔,es2019登场

喜大普奔,es2019登场

作者头像
秋风的笔记
发布2020-10-27 11:26:13
6270
发布2020-10-27 11:26:13
举报
文章被收录于专栏:秋风的笔记

就在刚4个小时前,TC39将以下特性加入到了 ES2019 中。让我们来看看这些新的特性给我们带来了什么样的改变。

ES2019 新特性:

➡️ Array#{flat,flatMap}

➡️ Object.fromEntries

➡️ String#{trimStart,trimEnd}

➡️ Symbol#description

➡️ try { } catch {} // optional binding

➡️ JSON ⊂ ECMAScript

➡️ well-formed JSON.stringify

➡️ stable Array#sort

➡️ revised Function#toString

JSON ⊂ ECMAScript (JSON superset)

行分隔符(U + 2028)和段分隔符(U + 2029)符号现在允许在字符串文字中,与JSON匹配。 以前,这些符号在字符串文字中被视为行终止符,因此使用它们会导致SyntaxError异常。

well-formed JSON.stringify

更加友好的 JSON.stringify (修复了对于一些超出范围的 unicode 展示错误的问题。)

如果输入 Unicode 格式但是超出范围的字符,在原先JSON.stringify返回格式错误的Unicode字符串:

代码语言:javascript
复制
JSON.stringify('\uD800');
// → '"�"'

现在实现了一个改变JSON.stringify的第3阶段提案,因此它为其输出转义序列,使其成为有效Unicode(并以UTF-8表示):

代码语言:javascript
复制
JSON.stringify('\uD800');
// → '"\ud800"'

stable Array#sort

在以前,sort 函数中,10个以上元素的数组 V8 使用不稳定的QuickSort(快排。现在,使用稳定的TimSort算法。)

TimSort算法: https://en.wikipedia.org/wiki/Timsort

revised Function#toString

Function.prototype.toString()现在返回精确字符,包括空格和注释。原先和现在的比较:

代码语言:javascript
复制
// Note the comment between the `function` keyword
// and the function name, as well as the space following
// the function name.
function /* a comment */ foo () {}

// Previously:
foo.toString();
// → 'function foo() {}'
//             ^ no comment
//                ^ no space

// Now:
foo.toString();
// → 'function /* comment */ foo () {}'

Array #{flat, flatMap}

数组降维,递归地将数组展平到指定的深度,默认为1。

代码语言:javascript
复制
// Flatten one level:
const array = [1, [2, [3]]];
array.flat();
// → [1, 2, [3]]

// Flatten recursively until the array contains no more nested arrays:
array.flat(Infinity);
// → [1, 2, 3]
代码语言:javascript
复制
[2, 3, 4].flatMap((x) => [x, x * 2]);
// → [2, 4, 3, 6, 4, 8]

Object.fromEntries

Object.fromEntries(Object.entries(object))≈ 对象

它类似于Lodash的_.fromPairs。

String#{trimStart,trimEnd}

前后的空白符可以指定一边去除。

代码语言:javascript
复制
const string = '  hello world  ';
string.trimStart();
// → 'hello world  '
string.trimEnd();
// → '  hello world'
string.trim();
// → 'hello world'

Symbol.prototype.description

通过工厂函数Symbol()创建符号时,您可以选择通过参数提供字符串作为描述:

代码语言:javascript
复制
const sym = Symbol('The description');

以前,访问描述的唯一方法是将符号转换为字符串:

代码语言:javascript
复制
assert.equal(String(sym), 'Symbol(The description)');

现在引入了getter Symbol.prototype.description以直接访问描述:

代码语言:javascript
复制
assert.equal(sym.description, 'The description');

try {} catch {}

现在try {} catch {} 有了更加简便的方法,变成了可选型。

在以前

代码语言:javascript
复制
try {} catch (e) {}

现在

更多提案:

https://github.com/tc39/proposals/blob/master/finished-proposals.md

长按二维码,可以关注我哟

万水千山总是情,点个小赞行不行

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-01-30,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 秋风的笔记 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • ES2019 新特性:
    • JSON ⊂ ECMAScript (JSON superset)
      • well-formed JSON.stringify
        • stable Array#sort
          • revised Function#toString
            • Array #{flat, flatMap}
              • Object.fromEntries
                • String#{trimStart,trimEnd}
                  • Symbol.prototype.description
                    • try {} catch {}
                    • 更多提案:
                    领券
                    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档