码迷,mamicode.com
首页 > 其他好文 > 详细

对象的扩展

时间:2019-12-04 23:40:54      阅读:115      评论:0      收藏:0      [点我收藏+]

标签:es6   ring   nbsp   microsoft   ble   ssi   ros   function   on()   

属性的简洁表示法

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()代替。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

对象的扩展

标签:es6   ring   nbsp   microsoft   ble   ssi   ros   function   on()   

原文地址:https://www.cnblogs.com/jeff-zhu/p/11986433.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!