您的位置:首页 > Web前端 > JavaScript

js-es6-对象扩展

2017-10-03 22:36 429 查看
更简洁的表示法

let a=1;
let obj={a};
console.log(obj)//{a: 1}
const obj={
fn:function(){
console.log('old');
},
fn2(){
console.log('new');
}
}
obj.fn();//old
obj.fn2();//new


属性表达式

let a='b';
let obj={
[a]:'c'
}
console.log(obj);//{b: "c"}


方法的name属性

函数的name属性,返回函数名。对象方法也是函数,因此也有name属性

let person = {
sayName: function() {
console.log(this.name);
}
}
let s1 = person.sayName.name;  // "sayName"
console.log(s1);


扩展运算符

let {a,b,...c}={a:'test',b:'haha',c:'ccc',d:'ddd'};
console.log(a);//test
console.log(b);//haha
console.log(c);//{c: "ccc", d: "ddd"}


Object新增的方法

Object.is()用来比较两个值是否严格相等。它与严格比较运算符(===)的行为基本一致,不同之外只有两个:一是+0不等于-0,二是NaN等于自身。

console.log(Object.is(NaN,NaN));//true
console.log(Object.is(+0,-0));//false
Object.assign()用来将源对象(source)的所有可枚举属性,复制到目标对象(target)。它至少需要两个对象作为参数,第一个参数是目标对象,后面的参数都是源对象。只要有一个参数不是对象,就会抛出TypeError错误  (浅拷贝)
var obj1={};
var obj2={a:'1'};
var obj3={b:'2'};
Object.assign(obj1,obj2,obj3);
console.log(obj1);//{a: "1", b: "2"}


如果目标对象与源对象有同名属性,或多个源对象有同名属性,则后面的属性会覆盖前面的属性。

var target1 = { a: 1, b: 1 };
var source1 = { b: 2, c: 2 };
var source2 = { c: 3 };
Object.assign(target1, source1, source2);
console.log(target1);//{a: 1, b: 2, c: 3}


Object.assign只拷贝自身属性,不可枚举的属性(enumerable为false)和继承的属性不会被拷贝。

属性名为Symbol值的属性,也会被Object.assign拷贝。

对于嵌套的对象,Object.assign的处理方法是替换,而不是添加。
var target = { a: { b: 'c', d: 'e' } }
var source = { a: { b: 'hello' } }
Object.assign(target, source);
console.log(target);// { a: { b: 'hello' } }
console.log(Object.assign([1, 2, 3], [4, 5])); // [4,5,3]


Object.entries()  遍历对象

let obj={
name:'haha',
age:20
}
for(let [key,value] of Object.entries(obj)){
console.log([key,value]);
// ["name", "haha"]
// ["age", 20]
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: