引用類型的值(對象)是引用對象的一個實例。
在JS中,引用類型是一種數據結構,用於將數據和功能組織在一起。
引用類型有時也被稱為對象定義,因為它們描述的是一類對象所擁有的屬性和方法。
創建Object實例的的方式有兩種。
第一種是使用new操作符后跟Object構造函數,如下:
var person = new Object(); //創建Object引用類型的一個新實例,並且把該實例保存在變量person中。
person.name = "CC";
person.age = 23;
第二種方法是使用對象字面量表達式,對象字面量是對象定義的一種簡寫形式,目的在於簡化創建包含大量屬性的對象的過程。
var person = {
name : "CC",
age : 23
};
在JS中,表達式上下文指的是該上下文期待一個值(表達式);賦值操作符表示后面是一個值;所以左花括號({)在這里表示一個表達式的開始。
同樣的花括號,如果出現在語句上下文中,例如跟在if語句的后面,則表示一個語句塊的開始。
注意:對象字面量表達式中,屬性與值之間用冒號(:)連接;屬性與屬性之間用逗號(,)分割;最后一個屬性之后不需要逗號。
通過對象字面量表達式定義對象時,實際上不會調用Object函數。
如果需要向函數傳遞大量可選參數,對那些必需值使用命名參數,使用對象字面量表達式封裝多個可選參數。
通常,訪問對象的屬性時使用的都是點表示法;不過,在JS中也可以使用方括號表示法來訪問對象的屬性。
在使用方括號語法時,應該將要訪問的屬性以字符串的形式放在方括號中。
方括號語法的主要優點是可以通過變量來訪問屬性;如果屬性中包含會導致語法錯誤的字符,或者屬性名使用的是關鍵字或保留字,也可以使用方括號表示法。
理解函數的參數
JS中的參數在內部是用一個數組來表示的。函數接收到的始終是這個數組。
在函數體內能夠通過arguments對象來訪問這個參數數組,從而獲取傳遞給函數的每一個參數。
arguments對象與數組類似,可以使用方括號語法訪問它的每一個元素,但它並不是Array的實例。
arguments[0]訪問第一個元素、arguments[1]訪問第二個元素。。。以此類推。。。
也就是說,下面兩個函數的功能完全一樣。
function sayHi (name,message) {
alert("Hello " + arguments[0] + "," + arguments[1]);
};
等價於:
function sayHi (name, message) {
alert("Hello " + name + "," + message);
};
這個事實,說明了JS中函數的一個重要特點:命名的參數只是提供便利,不是必需的。
通過訪問arguments對象的length屬性,可以獲知有多少參數傳遞給了函數。
arguments對象的length值是由傳入的參數的個數決定的,不是由定義函數時的命名參數的個數決定的。
arguments對象可以和命名參數一起使用。
arguments對象的值永遠與對應命名參數的值保持同步;它們的內存空間是獨立的,但是它們的值會同步。
參數始終是按值傳遞的,不可能通過引用傳遞參數。