对象的扩展
-
ES6允许对象之中直接写变量和函数,作为对象的属性和方法(这种方法叫简洁表示法)
var foo='bar'; var obj={foo}; obj ==> foo:"bar" function getPoint(){ var x=1; var y=10; return {x,y}; } getPoint(); ==>{x:1,y:10}
-
ES6允许字面量定义对象时,用表达式作为对象的属性名
var lastWord='last word'; var a={ 'first world':'hello', [lastWord]:'world' }; a[lastWord] ==>"world"
-
表达式也可以用来定义方法名:
let obj={ ['h'+'ello'](){ return 'hi'; } } obj.hello() ==>hi
-
属性名表达式与简洁表示法,不能同时使用,否则会报错
var foo='bar'; var bar='abc'; var baz={[foo]}; 这种形式是错误的 ---------------手动分割线--------------------- var foo='bar'; var baz={[foo]:'abc'}; 必须这样写完整
-
属性名表达式如果是一个对象,默认情况下会自动将对象转为字符串[Object Object]
const keyA={a:1}; const keyB={b:2}; const obj={ [keyA]:'valueA', [keyB]:'valueB' } obj; ==>{[object Object]: "valueB"} [keyA]、[keyB]都转化为[Object Object],后者覆盖前者,得到valueB
-
如果对象的方法是Symbol值,name属性返回的是这个Symbol值的描述
const key1=Symbol('description'); const key2=Symbol(); let obj={ [key1](){}, [key2](){} }; obj[key1].name; ==>"description" obj[key2].name; ==>""
-
Object.is()用于比较两个值是否严格相等,与严格比较运算符 === 行为基本一致
Object.is('foo','foo') ==>true Object.is({},{}) ==>true //不同之处有两个: +0=== -0 ==>true NaN===NaN ==>false Object.is(+0,-0) ==>false Object.is(NaN,NaN) ==>true