參考型別通常叫作類(class),引用值所處理的為對象。對象是有new運算子加上要執行個體化的類的名字建立,當有不止一個參數時,ECMAScript要求使用括弧,如果沒有參數時,括弧可以省略。
var o1 = new Object();var o2 = new Object;
儘管括弧不是必須的,但為避免婚禮,最好使用括弧。
1、Object類
ECMAScript中的所有類都有Object類繼承而來,Object類中的所有屬性和方法都會出現在其他類中。
Object類具有是屬性:
◊ Constructor —— 對建立對象的函數的引用(指標)。對於Object類,該指標指向原始的object()函數。
◊ Prototype —— 對該對象的對象原型的引用。
Object類具有的方法:
◊ HasOwnProperty(property) —— 判斷對象是否具有某個特定的屬性。必須使用字串指定該屬性(例如:o.HasOwnProperty("name"))。
◊ IsPrototypeOf(object) —— 判斷該對象是否為另一個對象的原型。
◊ PrototypeIsEnumerable(property) —— 判斷給定的屬性是否可以用於for..in語句進行枚舉。
◊ ToString() —— 返回對象的原始字串表示。對於Object類,ECMA-262沒有定義這個值,所以不同的ECMAScript實現具有不同的值。
◊ ValueOf() —— 返回最適合該對象的原始值。對於許多類,該方法返回的值都與ToString()的傳回值相同。
2、Boolean類
Boolean類是Boolean原始類型的參考型別。要建立Boolean對象,只需要傳遞Boolean值作為參數:
var oBooleanObject = new Boolean(true);
Boolean對象將重寫Object類的ValueOf()方法,返回原始值,即true或false。重寫ToString()方法,返回字串"true"和"false"。
3、Number類
Number類是Number原始類型的參考型別。建立Number對象代碼如下:
var oNumberObject = new Number(55);
使用valueOf()方法擷取數字對象Number原始值:
var iNumber = oNumberObject.valueOf();
Number類處理數值的專用方法:
◊ toFixed() —— 返回具有指定位元小數的數位字串表示。
var oNumberObject = new Number(99);alert(oNumberObject.toFixed(2)); // outputs "99.00"
toFixed()的方法參數說明應該顯示的小數位元,空的小數由0補充。toFixed()方法能表示具有0到20位小數的數字,超出這個範圍的值會引發錯誤。
◊ toExponential() —— 返回用科學記號標記法表示的數字字串形式。
◊ toPrecision() —— 返回數位預定形式或指數形式。
4、String類
String類是String原始類型的對象標記法,建立String對象:
var oStringObject = new String('Hello World');
String()對象的valueOf()和toString()方法都會返回String型的原始值:
alert(oStringObject.valueOf() == oStringObject.toString()); // outputs "true"
String類屬性:
◊ length,返回字串中的字元個數;
var oStringObject = new String('Hello World');alert(oStringObject.length); // outputs "11"
String類方法:
◊ charAt() —— 返回包含指定位置處的字元的字串; 第一個字元的位置是0,第二個字元的位置是1,依次類推。
var oStringObject = new String("Hello World");alert(oStringObject.charAt(1)); // outputs "e"
◊ charCodeAt() —— 返回包含指定位置處的字元的字元代碼; 第一個字元的位置是0,第二個字元的位置是1,依次類推。
var oStringObject = new String("Hello World");alert(oStringObject.charCodeAt(1)); // outputs "101"
◊ concat() —— 用於把一個或多個字串串連到String對象的原始值上,該方法返回的是String原始值,保持原始的String對象不變。
var oStringObject = new String("Hello ");var sResult = oStringObject.concat("World");alert(sResult); // outputs "Hello World"alert(oStringObject); // outputs "Hello"
◊ indexOf() —— 從字串開頭開始檢索指定的子串在另一個字串中的位置。如果沒有找到該子串,則返回-1。
◊ lastIndexOf() —— 從字串結尾開始檢索指定的子串在另一個字串中的位置。如果沒有找到該子串,則返回-1。
var oStringObject = new String("Hello World");alert(oStringObject.indexOf("0")); // outputs "4"alert(oStringObject.lastIndexOf("0")); // outputs "7"
◊ slice() 和substring() —— 兩者均返回要處理的字串的子串,都接受一個活兩個參數。第一個參數是要擷取的子串的起始位置,第二個參數是要擷取子串終止前的位置。如果省略第二個參數,終止位預設為字串的長度。
slice()和substring()在參數為負數時,處理方式不同。對於負參數,slice()方法會用字串的長度加上參數,substring()方法則將其作為0處理,即忽略負數。
◊ toLowerCase() —— 將字串轉化成全小寫形式。
◊ toUpperCase() —— 將字串轉化成全大寫形式。
5、instanceof運算子
instanceof運算子與typeof運算子相似,用於識別正在處理的對象的類型。與typeof方法不同的是,instanceof方法要求開發人員明確地確認對象為某種特定類型。
var oStringObject = new String('Hello World');alert(oStringObject instanceof String); // outputs "true"
6、Array數組
字串、數值和布爾值都屬於離散值,如果某個變數是離散的,那麼在任意時刻及只能有一個值。如果想用一個變數來儲存一組值,就需要使用數組array。
在JavaScript指令碼中,數組使用關鍵字Array來聲明,同時還可以指定這個數組元素的個數,也就是數組的長度(length)。
var aTeam = new Array(12);
在無法提前預知某個數組元素最終的個數時,聲明數組時可以不指定具體個數。
var aColor = new Array();aColor[0] = "red";aColor[1] = "blue";aColor[2] = "purple";
每增加一個數組項,數組的長度就動態地增長。
另外還可以直接用參數建立數組。
var aMap = new Array{"China","USA"};
與字串的length屬性一樣,數組也可以通過length屬性來擷取其長度,數組的位置也是從0開始的。
除了Array()對象,數組還可以使用方括弧"["和"]"來定義,項與項之間用逗號分隔。
var aColor = ["red", "gray"];
對於數組而言,通常需要將其轉化為字串再進行使用,toString()方法可以很方便的實現這個功能。
alert(aColor.toString());
如果不希望用逗號進行轉換後的串連,而希望用指定的符號,可以用join()方法,該方法接受一個參數,即用來串連數組項的字串。
var sColor = aColor.join("|");