前言
前面在第三章基本概念一節稍微提及了引用類型的概念,在第四章詳細介紹了基本數據類型與引用類型作爲變量時的不同。本章將詳細介紹ECMAScript的原生引用類型。
首先複習下基本類型值與引用類型值的特點:
- 基本類型值在內存中佔據固定大小的空間,因此被保存在棧內存中
- 從一個變量向另一個變量複製基本類型的值,會創建這個值的一個副本
- 引用類型的值是對象,保存在堆內存中;
- 包含引用類型值的變量確實是在棧內存中,不過它僅僅是一個指向對象的指針而已
- 從一個變量向另一個變量複製引用類型的值,複製的是指針,因此兩個變量最終指向同一個對象
- 確定一個值是哪種基本類型可以用 typeof 操作符,而確定一個值是哪種引用類型可以使用 instanceof 操作符
引用類型的值(即對象)是某個特定引用類型的一個實例。
引用類型有時也被成爲對象定義,因爲它們描述的是一類對象所具有的屬性和方法。
5.1 Object類型
創建Object實例的方式:
- 使用new 操作符後面跟 Object構造函數:
var person = new Object(); //person是一個對象,即Object類型的實例
person.name = "Jack"; //name是person的屬性
person.age = 26;
- 使用對象字面量表示法(注意標點)
var person = {
name : "Jack", //此處是逗號
age : 26 //最後一個屬性後面沒有符號
}; //定義完需要引號結尾
☞對象字面量法要求的代碼量少,而且能給人封裝數據的感覺。實際上,對象字面量也是向函數傳遞大量可選參數的首選方式。
訪問對象屬性的方式:
- 點表示法
- 方括號表示法
alert(person.name); //點表示法
alert(person["name"]); //方括號法
var propertyName = "name"; //把屬性"name"賦值給一個變量
alert(person[propertyName]); //方括號法還可以通過此變量來訪問屬性
//當屬性名中包含會導致語法錯誤的字符,或者屬性名使用的是關鍵字或保留字,也可以使用方括號法
person["first name"] = "Jack"; //此例中,"first name"中有空格,不能用點表示法來訪問 person.first name 是錯誤的
注:除非必須使用變量來訪問屬性,否則建議使用點表示法。
5.2 Array 類型
特點:
- 和其他語言的數組一樣,都是數據的有序列表
- 不同的是,ECMAScript數組的每一項可以保存任何類型的數據。(解釋:第一項是String,第二項可以是Number,第三項又可以是對象。。。。)
- ECMAScript數組的大小可以動態調整,即隨着數據的添加自動增長以容納新增數據。
創建方法:
- 使用Array構造函數
-
- 空數組 var Obj = new Array();
- 指定長度的數組 var Obj = new Array(size);
- 指定元素的數組 var Obj = new Array( element0, element1, ..., elementn)
- 使用數組字面量表示法
- 單維數組 var Obj = [ element0, element1, ..., elementn];
- 多維數組 var Obj = [[數組序列1], [數組序列2], ....... , [數組序列n]];
基本操作:
數組屬性:
- constructor : 引用數組對象的構造函數
- length : 返回數值的長度(具體看P87)
- property : 通過增加屬性和方法擴展數組的定義
數組方法: