ECMAScript 2017 (ES8)新特性
来源:互联网 发布:山东大学网络教育登录 编辑:程序博客网 时间:2024/06/15 19:36
最近得知Ecma国际发布了第八版的ECMAScript语言规范,也就是我们通常喊的es6、es7后的es8了,官方叫法不用猜了肯定是ECMAScript 2017了。表示前端发展这么快有点小小的心累啊,罢了不多说就是干吧!
ECMAScript 2017 新特性如下:
- Object.values/Object.entries;
- 字符串填充;
- Object.getOwnPropertyDescriptor;
- 尾随逗号;
- 异步函数;
- 共享内存和原子
等。。。
(ECMAScript 2018 已在制定中。)
一、Object.values/Object.entries
object.values
返回一个数组,成员为参数对象可遍历的键值(不含继承的)。
若属性名为数值,则按照数值从小到大遍历,否则默认排序遍历;
若参数为字符串,则返回由拆分后的每个字符串组成的数组;
若参数为数值,则返回空数组;
若参数为布尔值,则返回空数组。
let obj = { 33:3 , 11:1 , 22:2 }, obj2 = { "三":3 , "一":1 , "二":2 }, obj3 = "Angelababy", obj4 = 123, obj5 = true;console.log( Object.values(obj) ); // [1,2,3]console.log( Object.values(obj2) ); // [3,1,2]console.log( Object.values(obj3) ); // ["A", "n", "g", "e", "l", "a", "b", "a", "b", "y"]console.log( Object.values(obj4) ); // []console.log( Object.values(obj5) ); // []
object.entries
返回一个数组,成员为参数对象可遍历的键值对数组(不含继承的),除返回值不同外,其方法与objest.values基本一样。
let obj = { 33:3 , 11:1 , 22:2 }, obj2 = { "三":3 , "一":1 , "二":2 }, obj3 = "Angelababy", obj4 = 123, obj5 = true;console.log( Object.entries(obj) ); // [ ["11",1] , ["22",2] , ["33",3] ]console.log( Object.entries(obj2) ); // [ ["三",3] , ["一",1] , ["二",2] ]console.log( Object.entries(obj3) ); // [ ["0","A"] , ["1","n"] , ["2","g"] , ["3","e"] , ["4","l"] , ["5","a"] , ["6","b"] , ["7","a"] , ["8",b"] , ["9","y"] ] console.log( Object.entries(obj4) ); // []console.log( Object.entries(obj5) ); // []
二、字符串填充
为了使开发人员更好的控制字符串,提供了以下方法:
string.padStart(maxLength,fillString/可不填)
"abc".padStart(6) // " abc" 未填写填充字符时候以空格填充"abc".padStart(6,"3") // "333abc""abc".padStart(6,"3").length // 6"abc".padStart(6,"123456") // "123abc" 自动忽略句尾多余的填充字符"abc".padStart(2,"123456") // "abc" 原字符串大于要求的数据时候则不发生变化返回原字符串
string.padEnd(maxLength,fillString/可不填)
padEnd()方法与padStart()方法类似,只不过填充字符串插在字符串尾部
"123".padEnd(8) // "123 " "123".padEnd(8,"c") // "123ccccc""123".padEnd(8,"c").length // 8"123".padEnd(8,"123456") // "12312345" "123".padEnd(2,"123456") // "123"
三、Object.getOwnPropertyDescriptor(obj, prop)
获取指定对象的自身属性描述符。自身属性描述符是指直接在对象上定义(而非从对象的原型继承)的描述符。
var obj = {};obj.newDataProperty = "abc";var descriptor = Object.getOwnPropertyDescriptor(obj, "newDataProperty");//outputs://configurable:true//enumerable:true//value:"abc"//writable:truedescriptor.writable = false;//outputs://writable:false
四、函数参数列表与调用中的尾部逗号
此特性使我们在定义或者调用函数时添加尾部逗号而不报错
var arr = [1,2,3] , arr2 = [1,2,3,4,];console.log(arr); // [1,2,3]console.log(arr2); // [1,2,3,4] (句尾逗号不会报错)function fun(x,y,z,){ return x+y+z}fun(1,2,3,) // 6 (句尾逗号不会报错)
五、异步函数
ES8 中允许使用 async/await 语法来定义与执行异步函数,async 关键字会返回某个 AsyncFunction 对象;在内部实现中虽然异步函数与迭代器的实现原理类似,但是其并不会被转化为迭代器函数:
异步函数声明: async function foo() {};
异步函数表达式: const foo = async function () {};
异步函数定义:let obj = { async foo() {} };
异步箭头函数: const foo = async () => {};
function fetchTextByPromise() { return new Promise(resolve => { setTimeout(() => { resolve("es8"); }, 2000); });}async function sayHello() { const externalFetchedText = await fetchTextByPromise(); console.log(`Hello, ${externalFetchedText}`); // Hello, es8}sayHello();console.log(1);sayHello();console.log(2);// 结果: // 1 (直接输出)// 2 (直接输出)// Hello, es8 (2秒后输出)
六、共享内存和原子
Lars Hansen提出了ES2017中 共享内存和Atomics的建议,截至2017年2月,它已在第4阶段中被批准,并包含到规范中。
此功能引入了一个新的低级别Atomics命名空间对象和一个SharedArrayBuffer构造函数,来作为更高级别并发抽象的原始构建块。这使开发人员能够共享多个service worker和核心线程之间的SharedArrayBuffer对象的数据。这种引入带来了巨大的益处,因为可以更轻松地在worker之间共享数据,从而可以改善worker之间的协调。
有关新的Atomics对象和SharedArrayBuffer构造函数的信息,请阅读深入分析或阅读Lars Hansen的简短教程。
- ECMAScript 2017 (ES8)新特性
- ECMAScript 2017(ES8)特性概述
- ECMAScript 2017(ES8)特性概述
- 你所要知道EcmaScript 2017(ES8)的一些新特征
- ECMAScript2017(ES8)主要的新特性
- ES7、ES8新特性
- ES8(ECMAScript 2017) 语言规范发布,附ES6,ES7,ES8规范文档下载
- ES8(ECMAScript 2017) 语言规范发布,附ES6,ES7,ES8规范
- ES8(ECMAScript 2017) 语言规范发布,附ES6,ES7,ES8规范文档下载
- 关于 ES7/ES8的一些新特性
- ECMAScript 6 新特性
- ECMAScript 6新特性
- ECMASCRIPT 5新特性
- ECMAScript 6新特性介绍
- ECMAScript 6新特性介绍
- PHP7 和 ECMAScript 新特性
- ECMAScript 6新特性简记
- ECMAScript 6新特性简记
- 《终极算法》阅读笔记与摘要(1)-序和第1-2章
- HTTP请求415错误 – 不支持的媒体类型(Unsupported media type)
- Corporative Network UVA
- ButterKnife使用详解
- 设计模式学习—迭代器模式(Iterator Design Pattern)
- ECMAScript 2017 (ES8)新特性
- android 插件化开发(个人理解入门)
- 程序员必须掌握的英语单词
- Operating System not found
- 感觉不错插件,持续更新
- UnderStand的使用说明
- Hbase学习笔记:表的拆分与合并
- muduo网络库预备知识点
- 新路程------ubuntu增加新硬盘