深入理解ES6读书笔记--对象
Opened this issue · 0 comments
lz-lee commented
新增方法
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} = {}) {
// ...
}