ECMA Script 2017 (ES8)新内容

Posted 听雪拨弦

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ECMA Script 2017 (ES8)新内容相关的知识,希望对你有一定的参考价值。

新增对象方法

Object.values() 

let obj =  0: 'a', 1: 'b', 2: 'c' ;
Object.values(obj);  // <- 输出 ['a','b','c'];

/* 返回一个数组,其元素是在对象上找到的可枚举属性值 属性的顺序与通过手动循环对象的属性值所给出的顺序相同  */

Object.entries()

Object.entries(obj);  //  <- 输出 [['0':'a'],['1','b'],['2','c']]

/* 返回一个给定对象自身可枚举属性的键值对数组,
其排列与使用 for...in 循环遍历该对象时返回的顺序一致
区别在于 for-in 循环还会枚举原型链中的属性 */

可以将obj转换为map

var obj =  0 : 'a' , 1: 22 ;
var map = new Map(Object.entries(obj));
console.log(map); // Map  0 : 'a' , 1: 22 ;

Object.getOwnPropertyDescriptors()

Object.create(
    Object.getPrototypeOf(obj),
    Object.getOwnPropertyDescriptors(obj)
);

/*
    Object.getOwnPropertyDescriptors()
    所指定对象的所有自身属性的描述符,如果没有任何自身属性,则返回空对象 
    Object.assign() 方法只能拷贝源对象的可枚举的自身属性,
    同时拷贝时无法拷贝属性的特性们,而且访问器属性会被转换成数据属性,
    也无法拷贝源对象的原型,该方法配合 Object.create() 方法可以实现上面说的这些 
*/

新增的字符串方法

String.padStart(length,padString)     <- 在原字符串开头填充指定的填充字符串直到目标长度所形成的新字符串
    参数 length     
        当前字符串需要填充到的目标长度 如果这个数值小于当前字符串的长度,则返回当前字符串本身
    参数 padString(可选)    
        填充字符串 如果字符串太长,使填充后的字符串长度超过了目标长度,
        则只保留最左侧的部分,其他部分会被截断 
        此参数的默认值为 " "(U+0020) 

String.padEnd(length,padString)       <- 在原字符串末尾填充指定的填充字符串直到目标长度所形成的新字符串 
    参数说明同上

 

异步函数  async/await


 

  async function name([param[, param[, ... param]]]) statements ;
    name  <- 函数名称
    param   <- 要传递给函数的参数的名称 
    statements  <- 包含函数主体的表达式 可以使用await机制 

  await
  用法:
      [返回值] = await 表达式;
        await 表达式会暂停当前 async function 的执行,等待 Promise 处理完成 
        若 Promise 正常处理(fulfilled),其回调的resolve函数参数作为 await 表达式的值,继续执行 async function 

AsyncFunction 构造函数
  AsyncFunction 构造函数用来创建新的 异步函数 对象,
  javascript 中每个异步函数都是  AsyncFunction 的对象 
  用法:
     

new AsyncFunction([arg1[, arg2[, ...argN]],] functionBody);


      arg1, arg2, ... argN
        函数的参数名,它们是符合 JavaScript 标示符规范的一个
        或多个用逗号隔开的字符串 例如 x、theValue、或 a,b 
      functionBody
        一段字符串形式的 JavaScript 语句,这些语句组成了新函数的定义 

      注意: AsyncFunction 并不是一个全局对象,需要通过下面的方法来获取:
       

Object.getPrototypeOf(async function()).constructor

  ※ 调用 AsyncFunction 构造函数时可以省略 new,其效果是一样的 

以上是关于ECMA Script 2017 (ES8)新内容的主要内容,如果未能解决你的问题,请参考以下文章

ECMA Script 2017 (ES8)新内容

掌握 JavaScript ES5 到 ES8 数组内容

ECMAScript 2017(ES8) 语言规范发布

ECMAScript 2017(ES8)新特性简介

ES8 走马观花(ECMAScript2017 新特性)

ES8(ECMAScript 2017) 语言规范发布,附ES6,ES7,ES8规范文档下载