ES2017

202 阅读2分钟
  1. ES2017引入了两个 String 方法:padStart()padEnd()

    字符串填充的目的是 向字符串添加字符,使字符串达到指定的长度。

    'test'.padStart(8) // '    test'.length === 8
    'test'.padStart(8,'abcd') // 'abctest'.length === 8
    
    'test'.padEnd(8) // 'test    '.length === 8
    
  2. Object.values()

    这个方法返回一个包含所有对象自身属性值的数组。

    const person = { name: 'Fred', age: 87 }
    Object.values(person) // ['Fred', 87]
    

    Object.values() 也适用于数组:

    const people = ['Fred', 'Tony']
    Object.values(people) // ['Fred', 'Tony']
    
  3. Object.entries()

    这个方法返回一个包含所有对象自身属性的数组,作为 [key,value] 对的数组。

    const person = { name: 'Fred', age: 87 }
    Object.entries(person) // [['name', 'Fred'], ['age', 87]]
    

    Object.entries() 也适用于数组:

    const people = ['Fred', 'Tony']
    Object.entries(people) // [['0', 'Fred'], ['1', 'Tony']]
    
  4. Object.getOwnPropertyDescriptors()

    此方法返回对象的所有自有(非继承的)属性描述符。

    JavaScript 中的任何对象都有一组属性,每个属性都有一个描述符。

    描述符是属性(property) 的一组特性(attributes),它由以下的子集组成:

    • value:属性的值
    • writabletrue 表示改属性可以被修改
    • get:属性的 getter 函数,在读取属性时调用
    • set:属性的 setter 函数,在属性设置值时调用
    • configurable:如果为 false ,则不能删除属性,也不能更改任何属性,但值除外
    • enumerable:如果属性是可枚举的,则为 true

    Object.getOwnPropertyDescriptors(obj) 接受一个对象,并返回一个带有描述符集的对象。

    这个方法有什么用?

    ES2015 给我们带来了 Object.assign() 方法,它从一个或多个对象复制所有可枚举的属性,并返回一个新对象。

    但是存在问题,它无法正确复制具有非默认特性(attribute) 的属性 (property)(getter,setter,不可写属性,等)。

    如果一个对象只有一个 setter ,则无法使用 Object.assign() 正确地复制到一个新对象。

    例如:

    const person1 = {
        set name(newName) {
            console.log(newName)
        }
    }
    

    以下代码将不起作用:

    const person2 = {}
    Object.assign(person2, person1)
    

    但下面的代码就会奏效:

    const person3 = {}
    Object.defineProperties(person3,
      Object.getOwnPropertyDescriptors(person1))
    

    使用 Object.create() 对浅拷贝对象也有同样的限制

  5. 参数列表或调用中尾随逗号

    此功能允许在函数声明和函数调用中使用尾随逗号:

    const doSomething = (var1, var2,) => {
      //...
    }
    doSomething('test2', 'test2',)
    
  6. async await

  7. 共享内存和Atmotics

    详情查看另一篇和该小标题同名笔记, 点这里