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 浅复制
路很远,但从未止步