您的位置:首页 > 其它

ES6学习7章:对象的扩展

2017-12-15 14:09 351 查看

对象属性和方法的简洁表示法

在ES6中允许只写属性名,不写属性值,此时的属性值就是属性名对应的变量的值

var birth = '2000/01/01'
var person = {
name:'张三',
birth,//等同于 birth : birth
hello(){console.log('hello world')}  // 等同于 hello:function(){...}
}


新的对象API

Object.is()

判断两个值是否严格相等

场景:在ES5中NaN是不等于自身的,可以通过Object.is()来判断

Object.is(+0,-0) //false   在ES5中两者相等
Object.is(NaN,NaN)  //true


Object.assign(target,source1,source2)

用于对象的合并,将源对象(source)的所有可枚举属性,复制到目标对象(target)

如果只有一个参数,则返回该参数

undefined和null不能做为参数,因为它们不能转成对象(作为首参数报错,做为source参数无值)

Object.assign()是浅拷贝,而不是深拷贝。(即:如果源对象某个属性的值是对象,那目标对象拷贝得到的是这个对象的引用)

当target和source有同名属性时,会替换,而不是添加

var obj1 ={
name:'haha',
age:18
}
var obj2={}
Object.assign(obj2,obj1) // Object.assign(target,source1,source2,...)
# 浅拷贝
var obj1 ={a:{b:1}}
var obj2 = Object.assign({},obj1)
obj1.a.b=2;
obj2.a.b // 2
# 合并多外对象
var merge = (...sources)=>Object.assign({},...sources)
# 为类对象属性赋值
class Point{
constructor(x,y){
Object.assign(this,{x,y})
}
}
# 设置初始值
let options = Object.assign({},DEFAULTS,options)


Object.assign的作用

1. 浅拷贝对象的属性和方法

2. 为类对象赋值

3. 设置对象属性指定默认值

4. 合并多个对象

5. 克隆对象

对象的遍历方法

for…in

for…in 循环遍历对象自身的和继承的可枚举属性(不含Symbol属性)
Object.keys(obj)

Object.keys返回一个数组,包括对象自身的(不含继承的)所有可枚举属性

Object.getOwnPropertyName(obj)

返回一个数组,饮食对象所有属性

Object.getOwnPropertySymbols(obj)

返回数组,饮食对象自身的所有Symbol属性

Reflect.ownKeys(obj)

返回数组,饮食对象自身的所有属性(饮食Symbol属性和可枚举及不可枚举的)

对象属性获取API

Object.keys()

返回key数组,获取对象的所有可遍历属性的键名,
Object.values()

返回value数组,获取对象所有可遍历属性的值

Object.entries()

返回[key,value]为元素的数组,获取对象所有可遍历属性的键值数组

Rest解构赋值

…运算符用于解构。对象的Rest解构赋值用于从一个对象取值,相当于将所有可遍历的、但尚未被读取的属性,分配到指定的对象上面。

注意点:

- Rest解构赋值必须是最后一个参数,否则会报错

- 解构赋值是浅拷贝

- 不会拷贝继承自原型对象的属性
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: