ES6对象扩展学习
1、属性简写,在对象中允许只写属性名而不写属性值,属性值等于属性名所代表的变量。
var foo="hello"
var obj={foo}
//相当于obj={foo:"hello"}
2、函数简写,ES6对象中方法可以省去function。
var obj={
sayHi(){
console.log("hi");
}
//原ES5写法
sayHi:function(){
console.log("hi");
}
}
3、属性名表达式,ES6定义对象属性有两种方式
var obj={
one:1, //正常定义方式
['tw'+'o']:2 //使用属性名表达式定义
}
obj.one //1
obj.two //2
obj['one'] //1
obj['t'+'wo'] //2
//当属性名表达式为对象时,属性名会转换为[object Object]
var obj2{
[obj]:3
}
obj2 //{[object Object]: 3}
4、方法的name属性,返回方法名
bind 方法创造的函数, name 属性返回“bound ”加上原函数的名字:
Function 构造函数创造的函数, name 属性返回“anonymous
var obj={
sayHi(){
console.log("hi");
}
}
obj.sayHi.name //"sayHi"
5、Object.is(),ES5 比较两个值是否相等,只有两个运算符:相等运算符(==〉和严格相等运算符(===)。它们都有缺点,前者会自动转换数据类型,后者的 NaN 不等于自身,以及+0 等于-0 JavaScript缺乏这样 种运算:在所有环境中,只要两个值是 一样的,它们就应该相等。
Object.is(NaN,NaN) //true
NaN===NaN //false
Object.is(-0,+0) //false
+0===-0 //true
6、Object.assign(target,source),用于将源对象可枚举属性复制到目标对象,其中第一个参数为目标对象,其他为源对象。
Object.assign 方法实行是浅复制,而不是深复制。也就是说,如果源对象某个属性
的值是对象,那么目标对象复制得到的是这个对象的引用。
//具有相同属性名时,会覆盖目标对象的对应属性
var obj1={
a:1
}
var obj2={
a:4
b:2
}
var obj3={
c:3
}
Object.assign(obj1,obj2,obj3)
obj1 //{a:4,b:2,c:3}
7、Object.setPrototypeOf 方法用来设置 一个对象的prototype 对象,并返回参数对象本身
Object.getPrototypeOf() 则用于读取 个对象的 prototype 对象。
8、Object.value(),Object.keys(),Object.entries()分别用于返回对象属性值,对象属性键和同时返回键和值。