對象的擴展

一、屬性的簡潔表示法
     -- 屬性:直接寫變量。屬性名爲變量名, 屬性值爲變量的值
module.exports = { getItem, setItem, clear };
 
// 等同於
module.exports = {
  getItem: getItem,
  setItem: setItem,
  clear: clear
};
     --方法
var o = {
  method() {
    return "Hello!";
  }
};
// 等同於
var o = {
  method: function() {
    return "Hello!";
  }
};
二、屬性名錶達式
     ES6 容許字面量定義對象時,用表達式做爲對象的屬性名
let propKey = 'foo';
let obj = {
  [propKey]: true,
  ['a' + 'bc']: 123
};
三、Object.is()
     在全部環境中,只要兩個值是同樣的,它們就應該相等。相似於===
Object.is('foo', 'foo')
// true
Object.is({}, {})
// false
四、Object.assign()
     Object.assign方法用於對象的合併,將源對象(source)的全部可枚舉屬性,複製到目標對象(target)。第一個參數是目標對象,後面的參數都是源對象。
var target = { a: 1 };
var source1 = { b: 2 };
var source2 = { c: 3 };
Object.assign(target, source1, source2);
target // {a:1, b:2, c:3}
    -- 若是目標對象與源對象有同名屬性,或多個源對象有同名屬性,則後面的屬性會覆蓋前面的屬性。
    -- Object.assign方法實行的是淺拷貝,而不是深拷貝
var obj1 = {a: {b: 1}};
var obj2 = Object.assign({}, obj1);
obj1.a.b = 2;
obj2.a.b // 2
   用途:
          -- 爲對象添加屬性
class Point {
  constructor(x, y) {
    Object.assign(this, {x, y});
  }
}
          -- 合併多個對象
const merge =
  (target, ...sources) => Object.assign(target, ...sources);
          -- 爲屬性指定默認值
const DEFAULTS = {
     logLevel: 0,
     outputFormat: 'html'
};
function processContent(options) {
     options = Object.assign({}, DEFAULTS, options);
     console.log(options);
  // ...
}
五、Object.keys(),Object.values(),Object.entries()
    Object.keys() 返回一個數組,成員是參數對象自身的(不含繼承的)全部可遍歷(enumerable)屬性的鍵名。
    Object.values() 返回一個數組,成員是參數對象自身的(不含繼承的)全部可遍歷(enumerable)屬性的鍵值。
    Object.entries  返回一個數組,成員是參數對象自身的(不含繼承的)全部可遍歷(enumerable)屬性的鍵值對數組。
六、拓展運算符
    --擴展運算符(...)用於取出參數對象的全部可遍歷屬性,拷貝到當前對象之中。
let z = { a: 3, b: 4 };
let n = { ...z };
n // { a: 3, b: 4 }
相關文章
相關標籤/搜索