zoukankan      html  css  js  c++  java
  • 对象的扩展-01

    属性的简洁表示法

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

  • 相关阅读:
    前端开发Code Review内容【vue记录】
    Blue Jeans
    Arbitrage
    Common Subsequence
    Palindrome
    Stockbroker Grapevine
    Asteroids
    Frogger
    All in All
    Highways
  • 原文地址:https://www.cnblogs.com/jeff-zhu/p/11986433.html
Copyright © 2011-2022 走看看