美文网首页
前端学习之ES6-对象的扩展笔记

前端学习之ES6-对象的扩展笔记

作者: 娟子 | 来源:发表于2016-03-16 17:17 被阅读0次

    属性的简洁表示法

     ES6允许直接写入变量和函数,作为对象的属性和方法;这种写法同样可以应用于函数返回值
    

     var birth = '2000/01/01'; 
    
      var Person = { 
      name: '张三', 
      birth,    //等同于birth: birth 
      // 等同于hello: function ()... 
      hello() { 
              console.log('我的名字是', this.name); 
              }
      };
    function getPerson() {
       var name = 'LSJ';
       var age = 18;
       return {name,  age};
    }
    getPoint()// {name: 'LSJ', age:18}
    
    • ps: CommonJS API定义很多普通应用程序(主要指非浏览器的应用)使用的API,从而填补了这个空白。它的终极目标是提供一个类似Python,Ruby和Java标 准库。这样的话,开发者可以使用CommonJS API编写应用程序,然后这些应用可以运行在不同的JavaScript解释器和不同的主机环境中。

    属性名表达式

    JavaScript语言定义对象的属性,有两种方法:
    
    • 直接用标识符作为属性名 obj.foo = true;
    • 用表达式作为属性名 obj['a' + 'bc'] = 123;,这时要将表达式放在方括号之内。
    表达式还可以作为方法名
    `let obj = { 
    ['h'+'ello']() { return 'hi'; }
     };
    obj.hello() // hi`
    

    方法的name属性

    函数的`name`属性,返回函数名。对象方法也是函数,因此也有`name`属性。
    
    • 有两种特殊情况:bind方法创造的函数,name属性返回“bound”加上原函数的名字;Function构造函数创造的函数,name属性返回“anonymous”。
    (new Function()).name // "anonymous"
    var doSomething = function() {  // ...};
    doSomething.bind().name // "bound doSomething"
    
    • 如果对象的方法是一个Symbol值,那么name属性返回的是这个Symbol值的描述。

    Object.is()

    ES5比较两个值是否相等,只有两个运算符:相等运算符(==)和严格相等运算符(===)。它们都有缺点,前者会自动转换数据类型,后者的NaN不等于自身,以及+0等于-0。JavaScript缺乏一种运算,在所有环境中,只要两个值是一样的,它们就应该相等。

    ES6提出“Same-value equality”(同值相等)算法,用来解决这个问题。Object.is就是部署这个算法的新方法。它用来比较两个值是否严格相等,与严格比较运算符(===)的行为基本一致,并克服了上述问题。

    Object.assign()

    Object.assign方法用于对象的合并,将源对象(source)的所有可枚举属性,复制到目标对象(target)。

    Object.assign方法至少需要两个对象作为参数,第一个参数是目标对象,后面的参数都是源对象。只要有一个参数不是对象,就会抛出TypeError错误。

    注意,如果目标对象与源对象有同名属性,或多个源对象有同名属性,则后面的属性会覆盖前面的属性。
    var target = { a: 1, b: 1 };
    var source1 = { b: 2, c: 2 };
    var source2 = { c: 3 };
    Object.assign(target, source1, source2);
    target // {a:1, b:2, c:3}
    属性名为Symbol值的属性,也会被Object.assign拷贝。
    

    Object.assign只拷贝自身属性,不可枚举的属性(enumerable为false)和继承的属性不会被拷贝。

    对象的属性特征需要学习一下(js设计那本书)

    相关文章

      网友评论

          本文标题:前端学习之ES6-对象的扩展笔记

          本文链接:https://www.haomeiwen.com/subject/gbyxlttx.html