屬性的簡(jiǎn)潔表示法
ES6允許直接寫入變量和函數(shù),作為對(duì)象的屬性和方法;這種寫法同樣可以應(yīng)用于函數(shù)返回值
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定義很多普通應(yīng)用程序(主要指非瀏覽器的應(yīng)用)使用的API窘问,從而填補(bǔ)了這個(gè)空白瞳购。它的終極目標(biāo)是提供一個(gè)類似Python,Ruby和Java標(biāo) 準(zhǔn)庫(kù)。這樣的話肴敛,開發(fā)者可以使用CommonJS API編寫應(yīng)用程序艾君,然后這些應(yīng)用可以運(yùn)行在不同的JavaScript解釋器和不同的主機(jī)環(huán)境中采够。
屬性名表達(dá)式
JavaScript語(yǔ)言定義對(duì)象的屬性,有兩種方法:
- 直接用標(biāo)識(shí)符作為屬性名
obj.foo = true;
- 用表達(dá)式作為屬性名
obj['a' + 'bc'] = 123;
冰垄,這時(shí)要將表達(dá)式放在方括號(hào)之內(nèi)蹬癌。
表達(dá)式還可以作為方法名
`let obj = {
['h'+'ello']() { return 'hi'; }
};
obj.hello() // hi`
方法的name屬性
函數(shù)的`name`屬性,返回函數(shù)名。對(duì)象方法也是函數(shù)逝薪,因此也有`name`屬性隅要。
- 有兩種特殊情況:bind方法創(chuàng)造的函數(shù),name屬性返回“bound”加上原函數(shù)的名字董济;Function構(gòu)造函數(shù)創(chuàng)造的函數(shù)步清,name屬性返回“anonymous”。
(new Function()).name // "anonymous"
var doSomething = function() { // ...};
doSomething.bind().name // "bound doSomething"
- 如果對(duì)象的方法是一個(gè)Symbol值虏肾,那么name屬性返回的是這個(gè)Symbol值的描述廓啊。
Object.is()
ES5比較兩個(gè)值是否相等,只有兩個(gè)運(yùn)算符:相等運(yùn)算符(==)和嚴(yán)格相等運(yùn)算符(===)封豪。它們都有缺點(diǎn)谴轮,前者會(huì)自動(dòng)轉(zhuǎn)換數(shù)據(jù)類型,后者的NaN不等于自身撑毛,以及+0等于-0书聚。JavaScript缺乏一種運(yùn)算,在所有環(huán)境中藻雌,只要兩個(gè)值是一樣的雌续,它們就應(yīng)該相等。
ES6提出“Same-value equality”(同值相等)算法胯杭,用來解決這個(gè)問題驯杜。Object.is就是部署這個(gè)算法的新方法。它用來比較兩個(gè)值是否嚴(yán)格相等做个,與嚴(yán)格比較運(yùn)算符(===)的行為基本一致鸽心,并克服了上述問題。
Object.assign()
Object.assign
方法用于對(duì)象的合并居暖,將源對(duì)象(source)的所有可枚舉屬性顽频,復(fù)制到目標(biāo)對(duì)象(target)。
Object.assign
方法至少需要兩個(gè)對(duì)象作為參數(shù)太闺,第一個(gè)參數(shù)是目標(biāo)對(duì)象糯景,后面的參數(shù)都是源對(duì)象。只要有一個(gè)參數(shù)不是對(duì)象省骂,就會(huì)拋出TypeError錯(cuò)誤蟀淮。
注意,如果目標(biāo)對(duì)象與源對(duì)象有同名屬性钞澳,或多個(gè)源對(duì)象有同名屬性怠惶,則后面的屬性會(huì)覆蓋前面的屬性。
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值的屬性轧粟,也會(huì)被Object.assign拷貝策治。
Object.assign
只拷貝自身屬性脓魏,不可枚舉的屬性(enumerable為false)和繼承的屬性不會(huì)被拷貝。
對(duì)象的屬性特征需要學(xué)習(xí)一下(js設(shè)計(jì)那本書)