js-es6-对象扩展

来源:互联网 发布:linux 重定向 2 1 编辑:程序博客网 时间:2024/04/30 12:12

更简洁的表示法

let a=1;let obj={a};console.log(obj)//{a: 1}
const obj={fn:function(){console.log('old');},fn2(){console.log('new');}}obj.fn();//oldobj.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);//testconsole.log(b);//hahaconsole.log(c);//{c: "ccc", d: "ddd"}


Object新增的方法

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

console.log(Object.is(NaN,NaN));//trueconsole.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]}





原创粉丝点击