屬性的簡潔表示法
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標 準庫。這樣的話,開發(fā)者可以使用CommonJS API編寫應用程序,然后這些應用可以運行在不同的JavaScript解釋器和不同的主機環(huán)境中。
屬性名表達式
JavaScript語言定義對象的屬性,有兩種方法:
- 直接用標識符作為屬性名
obj.foo = true; - 用表達式作為屬性名
obj['a' + 'bc'] = 123;,這時要將表達式放在方括號之內。
表達式還可以作為方法名
`let obj = {
['h'+'ello']() { return 'hi'; }
};
obj.hello() // hi`
方法的name屬性
函數的`name`屬性,返回函數名。對象方法也是函數,因此也有`name`屬性。
- 有兩種特殊情況:bind方法創(chuàng)造的函數,name屬性返回“bound”加上原函數的名字;Function構造函數創(chuàng)造的函數,name屬性返回“anonymous”。
(new Function()).name // "anonymous"
var doSomething = function() { // ...};
doSomething.bind().name // "bound doSomething"
- 如果對象的方法是一個Symbol值,那么name屬性返回的是這個Symbol值的描述。
Object.is()
ES5比較兩個值是否相等,只有兩個運算符:相等運算符(==)和嚴格相等運算符(===)。它們都有缺點,前者會自動轉換數據類型,后者的NaN不等于自身,以及+0等于-0。JavaScript缺乏一種運算,在所有環(huán)境中,只要兩個值是一樣的,它們就應該相等。
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設計那本書)