ES6中对对象新增了很多特性和方法,简化了很多。
-
成员速写和方法速写
//befor: function createUser(name,age,sex) { return{ name : name, age : age, sex : sex, say : function(){ console.log(this.name,this.age) } } } //es6 function createUser(name,age,sex) { return{ name, age, sex, fun(){ console.log(this.name,this.age) } } } const user = createUser("1","22","boy"); console.log(user); user.fun();
省略了冒号和属性值,这样写让代码更简洁了
-
项目2
//befor const user = { name : '紫紫', age : 20 } user['ages'] = 20; console.log(user) //{name: "紫紫", age: 20, ages: 20} //now const prorp1 = "name"; const prorp2 = "age"; const users = { [prorp1] : '张三', [prorp2] : 112 } console.log(users); {name: "张三", age: 112}
用数组变量作为属性名
在ES6中还新增了许多对象的API
-
Object.is(),比较两个值是否相同,ES5中有相等运算符(==)和严格相等运算符( === ),这两个都有各自的缺点,相等运算符会自动转换数据类型,严格运算符判断NaN,+0 -0,判断的问题,Object.is() 就很好的解决了这些问题
console.log(NaN === NaN) //false console.log(-0 === +0) //trun console.log(Object.is(NaN,NaN)) //true console.log(Object.is(+0,-0)) //false
-
assign(url: DOMString) 混合对象、克隆
const obj1 = { a : 1, b : 2, c : 3 } const obj2 = { d : 3, e : 4 } const obj = Object.assign({},obj1,obj2); console.log(obj); console.log(obj == obj1) /*Object a: 1 b: 2 c: 3 d: 3 e: 4*/ //false
先将obj2的所有可枚举对象赋值给obj2,然后在依次obj1的属性
-
getOwnPropertyNames() 枚举的顺序,返回一个数组,枚举出来对象的属性
const obj = { a : 1, b : 3, c : 5, d : 7, 0 : 1, 3 : 5 } console.log(obj); console.log(Object.getOwnPropertyNames(obj)) //{0: 1, 3: 5, a: 1, b: 3, c: 5, d: 7} //(6) ["0", "3", "a", "b", "c", "d"]
按顺序排列了对象的属性名
-
setPrototypeOf() 设置某个对象的隐式原型 ,接收两个参数:
第一个是现有对象,第二个是原型对象。
const objj1 = {
a : 1
}
const objj2 = {
b : 2
}
Object.setPrototypeOf(objj1,objj2)
console.log(objj1)
/*
{a: 1}
a: 1
__proto__:
b: 2__proto__: Object
*/
可以看到a1的__proto__ 里面有了b2