一、屬性的簡潔表示法
-- 屬性:直接寫變量。屬性名爲變量名, 屬性值爲變量的值
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 }