ES6数组和对象的扩展

es6数组的扩展

  1. 扩展运算符

扩展运算符是对具有Iterator 接口的对象,都可以使用扩展运算符

  1. Array.from()

用于将两类对象转化为真正的数组 1.类似数组的对象(只要据有length属性, 都可以被转化为数组) 2.可遍历(iterable)的对象

  1. Array.of()

将一组值转化为数组

  1. find和findIndex

find方法,用于找出第一个符合条件的数组成员,没有找到会返回undefiend,findIndex方法返回的是第一个符合条件成员的位置, 如果找不到返回-1, find和findIndex都可以接受第二个参数,用来绑定回调函数的this

  1. 数组实例的fill()

fill方法使用给定值,填充一个数组。用于初始化数组值,接受第二个和第三个参数,用于指定开始和结束位置

  1. 数组实例的方法entries() keys()和values()

这三个方法提供新的方法,用于遍历数组, 都返回一个遍历器对象,可以用for..of循环进行遍历 keys是对键名的遍历,values是对键值的遍历 entries是对键值对的遍历

  1. 数组实例的includes()

表示某个数组是否包含给定的值, 返回true,否则返回false

Object对象的新增方法

  1. 属性的简洁表示

es6允许直接写入变量和函数,最为对象的属性和方法 主要使用: 1.函数返回值, 2. module.exports导出 3. 属性的setter和getter

var obj = {
 foo, // 属性
 methods() { // 方法
 }
}

  

  1. 属性的遍历

es6一共5种方法可以遍历对象的属性

  • for..in: 循环遍历对象自身和继承的可枚举变量 (不含Symbol属性)
  • Object.keys(obj): 返回一个数组,包含对象自身所有可枚举属性的键名
  • Object.getOwnPropertyNames(obj): 返回一个数组,包含对象自身的所有属性的键名
  • Object.getOwnPropertySymbols(obj): 返回一个数组,包含自身所有的symbol属性的键名
  • Reflect.ownKeys(): 返回一个数组,包含对象自身的所有键名,不管键名是 Symbol 或字符串,也不管是否可枚举
  1. super关键字

js中this的关键字总是指向函数所在的当前对象,es6新增了另一个类似的关键字super,指向当前对象的原型对象,super只能用在对象的方法中,而且是方法的简写属性

 const proto = {
   foo: 'hello'
  }
  const obj = {
   foo: 'world',
   find() {
    return super.foo  // 访问obj的原型属性的foo属性
   }
  }
 Object.setPrototypeOf(obj, proto) // 设置obj的原型为proto
 obj.find() // 'hello'

  

  1. 对象的新增方法

同值相等的算法, 用来比较两个值严格相等 Object.is('foo', 'foo') // true Object.is({}, {}) // false

  • Object.assign(target, source)

对象的合并,将原对象所有的可枚举属性,复制到目标对象上

  • 常见用途
    • 为对象添加属性
    class point {
       constructor (x, y) {
        Object.assign(this, {x, y})  // 将属性x和y添加Point类的对象实例上
       }
      }
    

      

    • 为对象添加方法
     Object.assign(SomeClass.prototype, {  // 为对象原型上添加方法
      someMethod(arg1, arg2){}
      antherMethod() {}
     })
    

      

    • 克隆对象
    function clone(origin) {
       return Object.assign({}, origin)
      }
      function clone(origin) {
         let originProto = Object.getPrototypeOf(origin);
         return Object.assign(Object.create(originProto), origin);
       }
    

      

    • 合并多个对象 const merge = (target, ...sources) => Object.assign(target, ...sources)
  1. __proto__属性,Object.setPrototypeOf() Object.getPrototypeOf()

js语言对象继承是通过原型链实现的,ES6提供了更多的原型链方法 __proto__属性,Object.getPrototypeOf() 获取原型prototype属性 Object.setPrototypeOf(obj, proto), Object.create() 设置原型属性

  1. Object.keys() Object.Values() Object.entries()

返回对象属性组成的数组

猜你喜欢

转载自www.cnblogs.com/kuishen/p/11113189.html