引用類型的值(對(duì)象)是引用類型的一個(gè)實(shí)例。在ECMAScript中弓千,引用類型是一種數(shù)據(jù)結(jié)構(gòu)衡便,用于將數(shù)據(jù)和功能組織在一起。引用類型有時(shí)候也被稱為對(duì)象定義洋访,因?yàn)樗鼈兠枋龅氖且活悓?duì)象所具有的屬性和方法孤里。
對(duì)象是某個(gè)特定引用類型的實(shí)例鹊碍。新對(duì)象是使用new操作符后跟一個(gè)構(gòu)造函數(shù)來創(chuàng)建的。構(gòu)造函數(shù)本身就是一個(gè)函數(shù)乎完,只不過該函數(shù)是出于創(chuàng)建新對(duì)象的目的而定義的桥状。
var person = new Object();
這行代碼創(chuàng)建了Object引用類型的一個(gè)新實(shí)例转晰,然后把該實(shí)例保存在了變量person中。使用的構(gòu)造函數(shù)是Object,它只為新對(duì)象定義了默認(rèn)的屬性和方法。ECMAScript提供了很多原生引用類型(例如Object)冬耿。
Object類型
雖然Object的實(shí)例不具備多少功能,但對(duì)于在應(yīng)用程序中存儲(chǔ)和傳聲數(shù)據(jù)而言,它們確實(shí)是非常理想的選擇荷憋。
Object是一個(gè)基礎(chǔ)類型瘫里,其他所有類型都從Object繼承了基本的行為坛吁。
創(chuàng)建Object實(shí)例的方式有兩種哆姻。第一種是使用new操作符后跟Object構(gòu)造函數(shù),如:
var person = new Object();
person.name = "Icey";
person.age = 25;
另一種方式是使用對(duì)象字面量表示法灵妨。對(duì)象字面量是對(duì)象定義的一種簡(jiǎn)寫形式筋量,目的在于簡(jiǎn)化創(chuàng)建包含大量屬性的對(duì)象的過程。如:
var person = {
name : "Icey".
age : 25
}
在使用對(duì)象字面量語法時(shí),屬性名也可以使用字符串,如:
var person = {
"name" : "Icey",
"age" : 25,
5 : true
}
這里纫雁,數(shù)值屬性會(huì)自動(dòng)轉(zhuǎn)換成字符串忌愚。
使用對(duì)象字面量時(shí)简十,如果留空花括號(hào),則可以定義只包含默認(rèn)屬性和方法的對(duì)象厅瞎。
var person = {};
person.name = "Icey";
person.age = 25;
在通過對(duì)象字面量定義對(duì)象時(shí)碟刺,實(shí)際上不會(huì)調(diào)用Object構(gòu)造函數(shù)。
對(duì)象字面量也是向函數(shù)傳遞大量可選參數(shù)的首選方式占哟,例如:
function displayInfo(args) {
var output = "";
if (typeof args.name == "string") {
output += "Name: " + args.name + "\n";
}
if (typeof args.age == "number") {
output += "Age: " + args.age + "\n";
}
alert(output);
}
displayInfo({
name: "Icey",
age: 25
});
displayInfo({
name: "Root";
})
一般來說铐姚,訪問對(duì)象屬性時(shí)使用的都是點(diǎn)表示法氢橙,不做袍患,在JavaScript中也可以使用方括號(hào)表示法來訪問對(duì)象的屬性肆良。在使用方括號(hào)時(shí)夭谤,應(yīng)該將要訪問的屬性以字符串的形式放在方括號(hào)中,如:
alert(person["name"]); //"Icey"
alert(person.name); //"Icey"
從功能上看妆够,這兩種訪問對(duì)象屬性的方法沒有任何區(qū)別,但方括號(hào)語法的主要優(yōu)點(diǎn)是可以通過變量來訪問屬性,如:
var propertyName = "name";
alert(person[propertyName]); //"Icey"
如果屬性中包含會(huì)導(dǎo)致語法錯(cuò)誤的字符届慈,或這屬性名使用的是關(guān)鍵字或保留字,也可以使用方括號(hào)來訪問屬性播揪,如:
person["first name"]= "Icey";
由于"first name" 中包含一個(gè)空格,所有不能使用點(diǎn)表示法來訪問它峡继。然而,屬性名中是可以包含非字母非數(shù)字的择膝,這時(shí)候就可以是哦那個(gè)方括號(hào)表示法來訪問它們。
通常跺株,除非必須使用變量來訪問屬性腮出,否則建議使用點(diǎn)表示法胚嘲。