1、属性的简洁表示法
es6 允许直接写入变量和函数,作为对象的属性和方法
// 简洁表示法 ---> 变量 let o=1; let k=2; let es5={ o:o, k:k }; let es6={ o, k }; console.log(es5,es6); // {o:1, k:2} {o:1, k:2} // 简洁表示法 ---> 函数 let es5_method={ hello:function(){ console.log(‘hello‘); } }; let es6_method={ hello(){ console.log(‘hello‘); } }; console.log(es5_method.hello(),es6_method.hello()); // hello hello
2、属性名表达式
js 定义对象的属性有两种方法
// 方法一 字面量 obj.foo = true; // 方法二 表达式 obj[‘a‘ + ‘bc‘] = 123;
es6 允许字面量定义对象时,用表达式作为对象的属性名,即把表达式放在方括号内
let propKey = ‘foo‘; let obj = { [propKey]: true, [‘a‘ + ‘bc‘]: 123 }; console.log(obj); // {foo: true, abc: 123} let a=‘b‘; let es5_obj={ a:‘c‘, b:‘c‘ }; let es6_obj={ [a]:‘c‘ } console.log(es5_obj,es6_obj); // {a: "c", b: "c"} {b: "c"}
3、Object.is()
Object.is 方法用来比较两个值是否严格相等,与严格比较运算符(===)的行为基本一致
Object.is(‘foo‘, ‘foo‘) // true Object.is({}, {}) // false
不同之处只有两个:一是+0不等于-0,二是NaN等于自身
+0 === -0 // true NaN === NaN // false Object.is(+0, -0) // false Object.is(NaN, NaN) // true
4、Object.assign()
Object.assign方法用于对象的合并,将源对象(source)的所有可枚举属性,复制到目标对象(target)
Object.assign方法的第一个参数是目标对象,后面的参数都是源对象
var target = { a: 1 }; var source1 = { b: 2 }; var source2 = { c: 3 }; Object.assign(target, source1, source2); target // {a:1, b:2, c:3} console.log(Object.assign({a:‘a‘},{b:‘b‘})) // {a: "a", b: "b"}
注意点:
(1)、如果目标对象与源对象有同名属性,或多个源对象有同名属性,则后面的属性会覆盖前面的属性
var target = { a: 1, b: 1 }; var source1 = { b: 2, c: 2 }; var source2 = { c: 3 }; Object.assign(target, source1, source2); target // {a:1, b:2, c:3}
(2)、如果只有一个参数,Object.assign会直接返回该参数
var obj = {a: 1}; Object.assign(obj) === obj // true
(3)、如果该参数不是对象,则会先转成对象,然后返回
typeof Object.assign(2) // "object"
(4)、由于undefined和null无法转成对象,所以如果它们作为参数,就会报错
Object.assign(undefined) // 报错 Cannot convert undefined or null to object Object.assign(null) // 报错 Cannot convert undefined or null to object
(5)、Object.assign方法实行的是浅拷贝,而不是深拷贝。也就是说,如果源对象某个属性的值是对象,那么目标对象拷贝得到的是这个对象的引用
var obj1 = {a: {b: 1}}; var obj2 = Object.assign({}, obj1); obj2.a.b // 1 var obj1 = {a: {b: 1}}; var obj2 = Object.assign({}, obj1); obj1.a.b = 2; obj2.a.b // 2
上面代码中,源对象obj1的a属性的值是一个对象,Object.assign拷贝得到的是这个对象的引用。这个对象的任何变化,都会反映到目标对象上面
时间: 2024-11-07 13:17:53