lz-lee/notes

深入理解ES6读书笔记--对象

Opened this issue · 0 comments

新增方法

1、 Object.is(): 用于比较两个参数是否类型相同且具有相同的值

  • 与全等 === 的区别在于 +0 与 -0 识别为不相等,NaN 与 NaN 相等
+0 == -0  // true
+0 === -0 // true
Object.is(+0, -0) // false

NaN == NaN // false
NaN === NaN   //  false
Object.is(NaN, NaN)   // true

2、 Object.assign(): 混合。(为浅复制)

属性

1、 重复属性:选取最后一个取值

2、自有属性的枚举顺序

  • 由于浏览器厂商各自实现�不同,for……in� 循环的枚举顺序不确定。而Object.keys()JSON.stringify()for-in 使用相同的枚举顺序。

�原型

  • Object.getPrototypeOf() 返回�一个对象的原型(ES5)

  • Object.setPrototypeOf() 改变一个对象的原型

  • super: 是指向当前对象的原型的一个指针,实际上就是 Object.getPrototypeOf(this) 的值。

    • 使用super 调用对象原型上的方法,此时的�this 绑定会被自动设置为当前作用域的 this

    • 只有在使用简写方法的对象中才能使用super引用

    • 可用于多重继承

解构赋值

1、对象

  • �解构赋值表达式(=右侧的表达式)如果为 null 或者 undefined 会抛出错误

  • 如果变量名不存在于对象中,则会被赋值为 undefined ,可为其指定默认值

let node = {
  name: 'test',
  value: 'react'
}

let {name, value, type = 'js'} = node

  • 非同名变量赋值

    • 声明变量localName、localValue、localType 并赋值为 name、 value,�对localType添加默认值

    • name: localName语法含义为读取名为 name 的属性并将其值赋值给localName中

let node = {
  name: 'test',
  value: 'react'
}

let {name: localName, value: localValue, type: localType = 'js'} = node

  • 嵌套解构: �解构表达式中冒号前的标志符代表在对象中的检索位置,其右侧为�被赋值的变量名,�如果冒号后是 �{}, 表示更深层的解构。
let node = {
  name: 'react',
  loc: {
    type: {
      desc: 'mvvm',
      feature: 'fast'
    }
  }
}

let {loc: {type: localTyep}} = node
// 将node.loc.type 赋值给 变量localType

2、数组

  • 数组解构,数组本身不会发生变化

  • 用于交换两个变量的值

let a = 1, b = 2

[a, b] = [b, a]

a // 2
b // 1
  • 不定元素: 通过...语法将数组中的�其余元素赋值给变量。必须为最后一个条目。
let colors = ['red', 'green', 'blue']

let [firstC, ...restC] = colors

firstC // 'red'

restC // ['green', 'blue']
  • 用于复制数组,本质上是使用数组的concat()函数

3、函数参数,为可选的解构参数提供默认值,避免报错。

function setCookie(name, value, {secure, patt, domain, expires} = {}) {

  // ...
}