引用類型的值(對象)是引用類型的一個實例。在ECMAScript中,引用類型是一種數據結構,用于將數據和功能組織在一起。引用類型有時候也被稱為對象定義,因為它們描述的是一類對象所具有的屬性和方法。
對象是某個特定引用類型的實例。新對象是使用new操作符后跟一個構造函數來創建的。構造函數本身就是一個函數,只不過該函數是出于創建新對象的目的而定義的。
var person = new Object();
這行代碼創建了Object引用類型的一個新實例,然后把該實例保存在了變量person中。使用的構造函數是Object,它只為新對象定義了默認的屬性和方法。ECMAScript提供了很多原生引用類型(例如Object)。
Object類型
雖然Object的實例不具備多少功能,但對于在應用程序中存儲和傳聲數據而言,它們確實是非常理想的選擇。
Object是一個基礎類型,其他所有類型都從Object繼承了基本的行為。
創建Object實例的方式有兩種。第一種是使用new操作符后跟Object構造函數,如:
var person = new Object();
person.name = "Icey";
person.age = 25;
另一種方式是使用對象字面量表示法。對象字面量是對象定義的一種簡寫形式,目的在于簡化創建包含大量屬性的對象的過程。如:
var person = {
name : "Icey".
age : 25
}
在使用對象字面量語法時,屬性名也可以使用字符串,如:
var person = {
"name" : "Icey",
"age" : 25,
5 : true
}
這里,數值屬性會自動轉換成字符串。
使用對象字面量時,如果留空花括號,則可以定義只包含默認屬性和方法的對象。
var person = {};
person.name = "Icey";
person.age = 25;
在通過對象字面量定義對象時,實際上不會調用Object構造函數。
對象字面量也是向函數傳遞大量可選參數的首選方式,例如:
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";
})
一般來說,訪問對象屬性時使用的都是點表示法,不做,在JavaScript中也可以使用方括號表示法來訪問對象的屬性。在使用方括號時,應該將要訪問的屬性以字符串的形式放在方括號中,如:
alert(person["name"]); //"Icey"
alert(person.name); //"Icey"
從功能上看,這兩種訪問對象屬性的方法沒有任何區別,但方括號語法的主要優點是可以通過變量來訪問屬性,如:
var propertyName = "name";
alert(person[propertyName]); //"Icey"
如果屬性中包含會導致語法錯誤的字符,或這屬性名使用的是關鍵字或保留字,也可以使用方括號來訪問屬性,如:
person["first name"]= "Icey";
由于"first name" 中包含一個空格,所有不能使用點表示法來訪問它。然而,屬性名中是可以包含非字母非數字的,這時候就可以是哦那個方括號表示法來訪問它們。
通常,除非必須使用變量來訪問屬性,否則建議使用點表示法。