ES6对象扩展

1、属性简写

ES6允许直接写入变量和函数,作为对象的属性和方法,这时,当对象属性名与属性值名(注意:此时属性值用一个变量代替)相同时可以简写;

var name = 'zhangsan';
var user = {name}; //等同于 var user = {name:name}

2、方法简写

//对象方法 ES5 写法
var user = {
    sayName:function(){
        ... 
    }      
}

//ES6写法
var user = {
    sayName(){
       ...
    }  
}

3、属性表达式

ES6允许字面量定义对象时,可以把表达式放在括号内

let flag = 'key';
let obj = {[flag]:true,['a'+'bc':123]}; /// obj = {key:true,abc:123}

4、对象方法的 name 属性,返回函数名

const person = { sayName() {}};
console.log(person.sayName.name);// "sayName"

5、Object.is()  同值相等,与 ‘===’类似,与之不同之处在于:+0不等于-0,NaN等于自身

console.log(Object.is(NaN,NaN));// true
 console.log(Object.is(+0,-0));// false

6、Object. setPrototypeOf(obj,prototype) ;

用来设置一个对象的prototype对象,返回参数对象本身。它是 ES6 正式推荐的设置 原型对象的方法。该方法等同如下写法:

function (obj, proto) {
    obj.__proto__ = proto;
    return obj;
}

7、Object. getPrototypeOf(obj)

用于读取一个对象的原型对象

8、遍历对象

①Object.keys(obj),返回一个数组,成员是参数对象自身的(不含继承的)所有可遍历(enumerable)属性的键名

var obj = {
    name:'zjl',
    age:19,
    gender:'男'
}
console.log(Object.keys(obj)) //[ 'name', 'age', 'gender' ]

②Object.values(obj),返回一个数组,成员是参数对象自身的(不含继承的)所有可遍历(enumerable) 属性的键值

var obj = {
    name:'zjl',
    age:19,
    gender:'男'
}
console.log(Object.values(obj)) //[ 'zjl', 19, '男' ]

③Object. entries(obj)  返回一个数组,成员是参数对象自身的(不含继承的)所有可遍历(enumerable) 属性的键值对数组。

var obj = {
    name:'zjl',
    age:19,
    gender:'男'
}
console.log(Object.entries(obj))   //[ [ 'name', 'zjl' ], [ 'age', 19 ], [ 'gender', '男' ] ]

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

Object.assign方法实行的是浅拷贝,而不是深拷贝。也就是说,如果源对象某个属 性的值是对象,那么目标对象拷贝得到的是这个对象的引用。

let obj = {
    name:'hah',
    friends:[],
    count:{}
}
let obj3 = Object.assign({},obj);
console.log(obj3 === obj);  //false
console.log(obj3.friends === obj.friends); // true  浅复制
console.log(obj3.count === obj.count)   //true  浅复制

 

posted @ 2019-09-01 19:16  zjl_712  阅读(374)  评论(0编辑  收藏  举报