(一)简洁表示法
ES6允许属性的简洁表示法,只写属性名,不写属性值。这时,属性值等于属性名所代表的变量
ES5写法
function getPoint() { var x = 1; var y = 10; return {x:x, y:y} }
ES6写法
function getPoint() { var x = 1; var y = 10; return {x, y}; }
(二)属性名表达式
即允许使用一个变量,或 变量相加,或字符串相加,结果为 propkey。以 [proKey] 的形式,作为 对象A的属性。
但是: 属性名表达式与简洁表示法 不能同时使用。
如下例子: 即可是 属性,也可以定义方法名
let propKey = 'foo'; let obj = { [propKey]: true, ['a' + 'bc']: 123, ['say'+'Hello'](){ } };
(三)方法的name属性
即返回函数名,对象的方法也是函数,因此,也有name属性。
如下例子中,firstName是 取值函数,在方法名前加上 get
如果是存值函数,方法名前会加上 set
let person= { sayName(){ }, get firstName(){ console.log('Ma'); return 'Mao'; } }
但是有两种特殊情况: bind 方法创造的函数,返回 “bound "+ 原函数名
Function构造函数创造的函数, 返回 "anonymous"
(new Function()).name; --anonymous let doOk=function(){}; doOK.bind().name --bound doOK
如果对象的方法是一个 Symbol值,则 name 值是 Symbol(description) 中的 description 。
(四)Object.is()
ES6提出 Same-Value equaliity 同值相等算法,使用 Object.is() 新方法 避免 ”==“中对值的类型自动转换,
以及 ”===“ 中 NaN !== NaN,+0===-0 。
(五)Object.assign()
Object.assign = function(target,sources)
用于对象的合并,将源对象的所有可枚举属性,复制到目标对象。
1、如果目标对象与源对象有同名属性,或多个源对象有同名属性,则后面的属性会覆盖前面的属性。
let target = { a: 1, b: 1 },
source1 = { b: 2, c: 2 },
source2 = { c: 3 };
Object.assign(target, source1, source2);
如果该参数不是对象,则会先转成对象,然后返回。
typeof Object.assing(2); // object
2、Object.assign 方法实行的是浅拷贝,而不是深拷贝。
如果源对象某个属性的值是对象,那么目标对象拷贝得到的是这个对象的引用。
浙公网安备 33010602011771号