对象的扩展
Posted jeff-zhu
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了对象的扩展相关的知识,希望对你有一定的参考价值。
属性的简洁表示法
var foo = ‘bar‘;
var baz = {foo};
baz // {foo: ‘ bar ‘ }
等同于 var baz = {foo:foo};
es6中允许在对象中只写属性名,不写属性值。这时属性值等于属性名所代表的变量。
function f ( x, y) {
return {x,y}
}
//等同于
function f (x ,y){
return {x:x,y:y};
}
除了属性可以简写,方法也可以简写
var o = {
method(){
return ‘hello‘;
}
}
//等同于
var o = {
method : function(){
return ‘hello‘;
}
}
注意简介写法属性名总是字符串
属性名表达式
obj [‘a‘+‘bc‘] = 123;
let propkey = ‘foo‘;
let obj = {
[propkey] : true,
[‘a‘+‘bc‘] : 123
}
Object.is()
比较两个值是否相等与
Object.is( ‘foo‘ , ‘foo‘ ) // true
与===基本一致 ,不同之处只有两个
+0 不等于-0 NaN等于NaN
Object.assign()
用于将源对象的所有自身可枚举属性复制到目标对象
Object.assign(target,source); 第一个参数是目标对象,后面的参数是源对象
如果目标对象与源对象有同名属性,或多个源对象有同名属性,则后面的属性会覆盖前面的属性
属性的可枚举属性
对象的每一个属性都具有一个描述对象(Descriptor),用于控制该属性的行为
Object.getOwnPropertyDescriptor方法可以获取该属性的描述对象
let obj = { foo: 123};
Object.getOwnPropertyDescriptor( obj , ‘foo‘ );
{
value : 123,
writable : true,
enumerable : true,
configurable : true
}
描述对象的enumerable属性称为可枚举性,如果该属性为false就表示某些操作会忽略当前属性
es5有三个操作会忽略enumerable为false的属性,
for ... in :只遍历对象自身和继承可枚举属性
Object.keys() : 返回对象自身的所有可枚举属性的键名
JSON.Stringify() :只串行化对象自身的可枚举属性
es6新增了一个操作 Object.assign() 会忽略enumerable为false的属性
另外es6规定所有class的原型方法都是不可枚举的
总的来说,操作中引入继承的属性会让问题复杂化,大多数的时候,我们只关心对象自身的属性。所以尽量不要用for...in循环,而用Object.keys()代替。
以上是关于对象的扩展的主要内容,如果未能解决你的问题,请参考以下文章