阅读更多

1顶
0踩

互联网

原创新闻 ES8都有哪些新特性,你还在用ES6吗?

2017-07-19 09:35 by 副主编 jihong10102006 评论(0) 有11241人浏览
ES8
引用
原文:ES8 was Released and here are its Main New Features
作者: Dor Moshe
翻译:黑色巧克力

译者注:EcmaScript第8版已经发布,下面来看看它的一些新特性。

EcmaScript 8或EcmaScript 2017将于6月底由TC39正式发布。我们在去年似乎讨论了很多关于EcmaScript的事情,那不是毫无价值的。目前的标准是每年发布一个新的ES规范版本。ES6发布于2015年,ES7发布于2016年,但有人记得ES5发布的时间吗?那还是在2009年,在JavaScript的神奇崛起之前。

因此,EcmaScript作为一种稳定的语言跟随JavaScript的发展而变化,现在我们需要将ES8输入到词典中。

说明书网页PDF版本。在本文中,我们将通过代码示例介绍ES8的主要新特性。

字符串填充

本节向字符串对象添加两个函数:padStart和padEnd。
正如它们的名称一样,这些函数的目的是填充字符串的开始或结束,以便产生的字符串达到给定的长度。可以使用特定的字符或字符串来填充它,或者默认设置空格。下面是方法声明:
str.padStart(targetLength [, padString])
str.padEnd(targetLength [, padString])

这些函数的第一个参数是targetLength,这是结果字符串的总长度。第二个参数是用于填充源字符串的可选的padString。默认值是空格。
'es8'.padStart(2);          // 'es8'
'es8'.padStart(5);          // '  es8'
'es8'.padStart(6, 'woof');  // 'wooes8'
'es8'.padStart(14, 'wow');  // 'wowwowwowwoes8'
'es8'.padStart(7, '0');     // '0000es8'
'es8'.padEnd(2);          // 'es8'
'es8'.padEnd(5);          // 'es8  '
'es8'.padEnd(6, 'woof');  // 'es8woo'
'es8'.padEnd(14, 'wow');  // 'es8wowwowwowwo'
'es8'.padEnd(7, '6');     // 'es86666'


Object.values 和 Object.entries

Object.values方法返回给定对象自己的可枚举属性值的数组,与for in循环所提供的顺序相同。这个函数的声明是非常简单的。
Object.values(obj)


obj参数是操作的源对象。它可以是一个对象或数组(一个具有索引的对象,如[10、20、30]- > { 0:10,1:20,2:30 })。
const obj = { x: 'xxx', y: 1 };
Object.values(obj); // ['xxx', 1]

const obj = ['e', 's', '8']; // same as { 0: 'e', 1: 's', 2: '8' };
Object.values(obj); // ['e', 's', '8']

// when we use numeric keys, the values returned in a numerical 
// order according to the keys
const obj = { 10: 'xxx', 1: 'yyy', 3: 'zzz' };
Object.values(obj); // ['yyy', 'zzz', 'xxx']
Object.values('es8'); // ['e', 's', '8']


Object.entries方法返回一个给定对象的可枚举属性[key, value]键值对的数组,与object.values的顺序相同。这个函数的声明也很简单。
const obj = { x: 'xxx’, y: 1 };
Object.entries(obj); // [[’x’, 'xxx’], [’y’, 1]]

const obj = [’e’, 's’, '8’];
Object.entries(obj); // [[’0’, 'e’], [’1’, 's’], [’2’, '8’]]

const obj = { 10: 'xxx’, 1: 'yyy’, 3: 'zzz' };
Object.entries(obj); // [[’1’, 'yyy’], [’3’, 'zzz’], [’10’, 'xxx’]]
Object.entries('es8'); // [['0', 'e'], ['1', 's'], ['2', '8']]


Object.getOwnPropertyDescriptors

getOwnPropertyDescriptors方法返回所有的属性描述符指定的对象。一个对象的属性描述符是直接在对象上定义的,并不是从对象的原型继承的。该函数的声明如下。
Object.getOwnPropertyDescriptors(obj)

obj是源对象。返回的描述符对象的可能键是可配置的、可枚举的、可写的、可获取和设置值。
const obj = { 
  get es7() { return 777; },
  get es8() { return 888; }
};
Object.getOwnPropertyDescriptors(obj);
// {
//   es7: {
//     configurable: true,
//     enumerable: true,
//     get: function es7(){}, //the getter function
//     set: undefined
//   },
//   es8: {
//     configurable: true,
//     enumerable: true,
//     get: function es8(){}, //the getter function
//     set: undefined
//   }
// }

描述符数据对于像装饰器这样的高级特性非常重要。

在函数参数列表和调用中允许尾部逗号

在函数参数中允许尾部逗号是编译器在列表末尾添加不必要的逗号时不抛出错误(语法错误)的能力:
function es8(var1, var2, var3,) {
  // ...
}

作为函数声明,可以应用于函数的调用如下。
es8(10, 20, 30,);

这个特性起源于对象常量和数组常量(10、20、30、)和{ x:1、}的逗号结尾。

异步函数

async function声明定义了一个异步函数,它返回一个AsyncFunction对象。在内部,异步函数与生成器很相似,但是它们没有被转换为生成器函数。
function fetchTextByPromise() {
  return new Promise(resolve => { 
    setTimeout(() => { 
      resolve("es8");
    }, 2000);
  });
}
async function sayHello() { 
  const externalFetchedText = await fetchTextByPromise();
  console.log(`Hello, ${externalFetchedText}`); // Hello, es8
}
sayHello();

调用sayHello方法,2秒后将会打印Hello,es8。
console.log(1);
sayHello();
console.log(2);

现在输出是这样的:
1 // immediately
2 // immediately
Hello, es8 // after 2 seconds

这是因为函数调用不会阻塞流。

注意,async function总是返回一个应答,而一个wait关键字只能在用async关键字标记的函数中使用。

共享内存和原子

在共享内存时,多个线程可以在内存中读取和写入相同的数据。原子操作确保编写和读取可预测的值,原子操作时有序的并且不会被中断。本节介绍了一个新的构造函数SharedArrayBuffer和使用静态方法的命名空间对象Atomics。

Atomic对象是静态方法(如Math)的对象,因此不能将其用作构造函数。该对象中的静态方法示例如下:
  • add / sub —— 在一个特定的位置添加或减去一个值
  • and / or / xor —— 按位与、按位或、按位异或
  • load —— 在特定位置获取值

明年的ES9 -取消模板字符串限制

使用带标记的模板字符串(ES6),我们可以做一些事情,例如声明一个模板解析函数,并根据逻辑返回一个值:
const esth = 8;
helper`ES ${esth} is `;
function helper(strs, ...keys) {
  const str1 = strs[0]; // ES
  const str2 = strs[1]; // is
  let additionalPart = '';
  if (keys[0] == 8) { // 8
    additionalPart = 'awesome';
  }
  else {
    additionalPart = 'good';
  }

  return `${str1} ${keys[0]} ${str2} ${additionalPart}.`;
}

返回值是“ES 8 is awesome”。
对于esth 7返回值是“ES 7 is good”。

对于包含例如\u或\x的子字符串的模板有一个限制,ES9将处理这个限制问题。可以在MDN网站TC39文件中阅读更多信息。

总结

JavaScript总是在不断更新。对规范采用新特性的过程是有计划地和平稳推进的。在最后阶段,TC39委员会确认了这些特性,并由核心开发人员实现。它们中的大多数已经是类型脚本语言、浏览器或其他的填充物的一部分,所以可以现在就去尝试使用它们。
  • 大小: 106.2 KB
  • 大小: 7.7 KB
  • 大小: 10.9 KB
  • 大小: 10 KB
  • 大小: 9.3 KB
  • 大小: 11.8 KB
  • 大小: 8.9 KB
  • 大小: 10.1 KB
1
0
评论 共 0 条 请登录后发表评论

发表评论

您还没有登录,请您登录后再发表评论

相关推荐

  • ES6、ES7、ES8、ES9、ES10新特性一览1

    ES6、ES7、ES8、ES9、ES10新特性ES全称ECMAScript,ECMAScript是ECMA制定的标准化脚本语言 ES6、ES7、ES8、ES9、

  • 今天发现了一个好网站,推荐给大家!

    大家都听说过0Day吧?呵呵,中国D版满天飞,我原来也用过很多0Day的软件,但一直没有特意去找过什么0Day的东东。我要下什么,一般都是到Baidu、Google搜索,然后到网站上去点下载链接,但这种搜索方式有好多东西都找不到,不能说不是一个遗憾。今天我在找《Wrox Press Beginning JavaScript 2nd Edition》这本书的时候,在无意中发现了http://www.

  • 搜集一些最近要学习的东西 [dot net]

    博客园是个好地方。最近又回到 dot net 平台开发。收据些东西。有时间慢慢啃暂时先找到了这一点。。有空慢慢逛逛。。不断更新.. 有好的也麻烦推荐一下。。 Castle Cuyahoga MyGeneration NHibernate Puzzle.Net Spring.net NET 2.0专题 http

  • 学习DotNet经典网站

     学习DotNet经典网站 还不错推荐给大家原文——名称:快速入门地址:http://chs.gotdotnet.com/quickstart/描述:本站点是微软.NET技术的快速入门网站,我们不必再安装.NET Framework中的快速入门示例程序,直接在网上查看此示例即看。****************************************************名称:微软官方.

  • DOTNET学习网站

    推荐.NET开发框架: NBear 国外技术站点(我想推荐) CodeProject DotNetJunkies SourceForge.net TheServerSide.Net asp.net CodeBetter MSDN Slashdot C# Corner GotDo

  • ES6/ES7/ES8新特性汇总

    ES6起各个版本的新特性汇总 ES全称ECMAScript,ECMAScript是ECMA制定的标准化脚本语言。目前JavaScript使用的ECMAScript版本为ECMA-417。关于ECMA的最新资讯可以浏览 ECMA news查看。ECMAScript 标准建立在一些...

  • ES6/ES7/ES8/ES9/ES10常用特性和新特性最全总结

    用一张图来总结ES7-ES12所有知识点。

  • ES6、ES7、ES8、ES9、ES10、ES11、ES12都增加了哪些新特性?

    前端开发的都知道,JavaScript经历了不同标本的迭代,从1到12的不断完善中会添加不同的新特性来解决前一个阶段的瑕疵,让我们开发...>下面来回顾ES5与谈谈ES6、ES7、ES8、ES9、ES10、ES11、ES12都增加了哪些新特性?

  • ES6/6+语法新特性

    ES6 加入许多新的语法特性,使编程的实现更简单、高效1、一定要赋初始值。2、一般常量名使用大写。3、常量的值不能修改。4、const也遵循块级作用域。5、对于数组和对象的修改,不算做对常量的修改,不会报错。

  • ES6和ES7及ES8新特性最新规范知识详细总结

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-hWfWai55-1637595380774)(images/微信截图_20201004101830.png)] ​ Ecma国际(Ecma International)是一家国际性会员制度的信息和电信标准...

  • ES6-Promise简介、ES7 新特性及ES8新特性-async和await

    目录ES6-PromisePromise简介Promise.prototype.then方法Promise.prototype.catch方法ES7 新特性Array.prototype.includes指数操作符ES8新特性-async和awaitasync 和 awaitasync函数await表达式async和await结合读取...

  • ES6、ES7、ES8特性一锅炖(ES6、ES7、ES8学习指南)

    目前JavaScript使用的ECMAScript版本为ECMAScript-262。 ECMAScript 标准建立在一些原有的技术上,最为著名的是 JavaScript (网景) 和 JScript (微软)。它最初由网景的 Brendan Eich 发明,第一次出现是在网景的 ...

  • ES6、ES7、ES8新特性收藏总结

    ES6、ES7、ES8

  • 消灭JavaScript怪兽第三季(合集):ES6/ES7/ES8新特性

    JavaScript一种直译式脚本语言,是一种动态类型、弱类型、基于原型的语言,内置支持类型,常用于网页客户端编程,使网页在客户端浏览器中,实现更多地动态功能,表现...主要包含ES6、ES7、ES8引入的新语言特性的学习。

  • 比较ES6、ES7、ES8常用特性和新特性

    比较ES6、ES7、ES8常用特性和新特性一、ES6变量的改变,添加了块级作用域的概念字符串新增方法函数可以像C/C++那样设置默认参数值,增加数据容错能力对象键值对重名简写对象字面量简写提供对象对象合并数据解构和...

  • ES6、 ES7、 ES8、 ES9、 ES10 新特性概览

    从提案到入选ECMA规范主要有以下几个阶段:ES6的特性比较多,在 ES5 发布近 6 年(2009-11 至 2015-6)之后才将其标准化, 两个发布版本之间时间跨度很大,所以ES6中的特性比较多。1.1 类(class) 对熟悉 Java,...

  • JavaScript中常见的ES6/ES7/ES8新特性

    今天,小编就带领大家来回顾一下到底有哪些es6、es7还有es8的语法新特性。 ES6新特性 类(class) 虽然在平时代码开发中我们更多用的是构造函数,但相信大家对class类应该也不会感到陌生。 class Animal { // ...

  • JS语法 ES6、ES7、ES8、ES9、ES10、ES11、ES12新特性

    新特性 ES6(2015) 1. 类(class) 2. 模块化(ES Module) 3. 箭头(Arrow)函数 4. 函数参数默认值 5. 模板字符串 6. 解构赋值 7. 延展操作符 8. 对象属性简写 9. Promise 10. let和const ES7(2016) ...

Global site tag (gtag.js) - Google Analytics