2.8 參考型別
1、Object類
ECMAScript中的所有類都是由Object類繼承而來。
Object類具有下列屬性:
Constructor:對建立對象的函數的引用(指標),對於Object類,該指標指向原始的Object()函數
Prototype:對該對象的對象原型的引用。
Object類還有幾個方法:
HasOwnProperty(property):判斷對象是否有某個特定的屬性。必須用字串指定該屬性值
IsPrototypeOf(object):判斷該對象是否為另一個對象的原型。
PropertyIsEnumerable(property):判斷給定的屬性是否可以用for...in語句進行枚舉
ToString():返回對象的原始字串表示。
ValueOf():返回最適合該對象的原始值。對於許多類,該方法返回的值都與toString()的傳回值相同。
上面列出的每種屬性和方法都會被其他類覆蓋。
2、Boolean類
在ECMAScript中很少使用Boolean對象,因為不易理解,如: 複製代碼 代碼如下:var oFalseObject = new Boolean(false);
var bResult= oFalseObject && true; //outpus true
在這段代碼中,用false值建立Boolean對象,然後用這個值與原始值true進行 AND 操作。在Boolean運算中,false和true進行AND 操作的結果是 false。不過,在這行代碼中,計算的是oFalseObject,而不是它的值false。在Boolean運算式中,所有對象都會被自動轉換為true,所以結果為true。參考下面的代碼: 複製代碼 代碼如下:var oFalseObject = new Boolean(false);
var bResult= oFalseObject && true; //outpus true
var bResult2= oFalseObject.valueOf() && true; //outpus false
3、Number類
Number的toString()方法在上篇文章中有詳細的介紹。
Number有幾個處理數值的專用方法:
toFixed(參數):返回的是具有指定位元小數的數位字串表示。參數範圍為0—20
toExponential(參數):返回的是用科學計數法表示的數位字串形式。與toFixed()方法相似,toExponential()也有一個參數要輸出的小數的位元。參數範圍為0—20
toPrecision(參數):根據最有意義的形式來返回數位預定形式或指數形式。它有一個參數,即用於表示數字總數(不包括指數)。參數最小為1
以上三個方法都會進行舍入操作。範例程式碼: 複製代碼 代碼如下:var oNumber=new Number(99);
console.log(oNumber.toFixed(0)); //outpus 99
console.log(oNumber.toFixed(2)); //outpus 99.00
var oNumber1=new Number(99);
console.log(oNumber1.toExponential(0)); //outpus 1e+2 進行了舍入操作
console.log(oNumber1.toExponential(1)); //outpus 9.9e+1
console.log(oNumber1.toExponential(2)); //outpus 9.90e+1
var oNumber3=new Number(99);
console.log(oNumber3.toPrecision(0)); //outpus error precision 0 out of range
console.log(oNumber3.toPrecision(1)); //outpus 1e+2 進行了舍入操作
console.log(oNumber3.toPrecision(2)); //outpus 99
console.log(oNumber3.toPrecision(3)); //outpus 99.0
4、String類
String對象的valueOf()方法和toString()方法都會返回String型的原始值: 複製代碼 代碼如下:var oStringObject=new String("Hello world");
console.log(oStringObject.valueOf() == oStringObject.toString());//outpus true
String類具有length屬性,它是字串中的字元個數,雙位元組字元也算一個字元。
String類有大量的方法,主要介紹如下:
charAt(整型參數):返回字串中單個字元。樣本: 複製代碼 代碼如下:var oStringObject=new String("Hello world");
console.log(oStringObject.charAt(0));//outpus "H"
console.log(oStringObject.charAt(1));//outpus "e"
console.log(oStringObject.charAt(11));//outpus (an empty string)
charCodeAt(整型參數):返回字串中單個字元代碼。樣本: 複製代碼 代碼如下:var oStringObject=new String("Hello world");
console.log(oStringObject.charCodeAt(0));//outpus "72"
console.log(oStringObject.charCodeAt(1));//outpus "101"
console.log(oStringObject.charCodeAt(11));//outpus NaN
concat(字串):把一個或多個字串串連到String對象的原始值上。樣本: 複製代碼 代碼如下:var oStringObject=new String("Hello world");
var sResult=oStringObject.concat(" Concat");
console.log(oStringObject);//outpus "String { 0="H", 1="e", 2="l", ...}"
console.log(sResult);//outpus "Hello world Concat"
alert(oStringObject);//outpus "Hello world"
indexOf(字串):返回指定的字串在另一個字串中的位置(從字串的開頭進行檢索)。
lastIndexOf(字串):返回指定的字串在另一個字串中的位置(從字串的結尾進行檢索)。樣本: 複製代碼 代碼如下:var oStringObject=new String("Hello Hello");
console.log(oStringObject.indexOf("lo"));//outpus 3
console.log(oStringObject.lastIndexOf("lo"));//outpus 9
localeCompare(字串):對字串進行排序,傳回值是下列三個之一:
A、如果String對象按照字母順序排在參數中的字串之前,返回負數(通常是-1,但真正傳回值由具體實現決定)
B、如果String對象等於參數中的字串,返回0
C、如果String對象按照字母順序排在參數中的字串之後,返回正數(通常是1,但真正傳回值由具體實現決定)
樣本: 複製代碼 代碼如下:var oStringObject=new String("Hello");
console.log(oStringObject.localeCompare("aello")); //outpus 1
console.log(oStringObject.localeCompare("Hello")); //outpus 0
console.log(oStringObject.localeCompare("zello")); //outpus -1
slice(整型參數[,整型參數])、substring(整型參數[,整型參數]):從子串建立字串值。第一個參數是要擷取的子串的起始位置,第二個參數是要擷取的子串終止前的位置,如果省略第二參數,終止位就預設為字串長度。這兩個方法都不改變String對象自身值。當參數為正時兩個方法用法及傳回值均相同,只有參數有負值時才不同。對於負參數,slice()方法會用字串的長度加上參數,substring()將其做為0處理。另外如果有兩個參數,第二個比第一個小時,slice()返回的值為空白,substring()會把較小的作為第一個參數。為樣本: 複製代碼 代碼如下:var oStringObject=new String("Hello World");
console.log(oStringObject.slice(3)); //outpus "lo World"
console.log(oStringObject.substring(3)); //outpus "lo World"
console.log(oStringObject.slice(3,7)); //outpus "lo W"
console.log(oStringObject.substring(3,7)); //outpus "lo W"
console.log(oStringObject.slice(3,0)); //outpus (an empty string)
console.log(oStringObject.substring(3,0)); //outpus "Hel"
console.log(oStringObject.slice(-3)); //outpus "rld"
console.log(oStringObject.substring(-3)); //outpus "Hello World"
console.log(oStringObject.slice(3,-4)); //outpus "lo W"
console.log(oStringObject.substring(3,-4)); //outpus "Hel"
toLowerCase()、toLocaleLowerCase()、toUpperCase()、toLocaleUpperCase():前兩個用於把字串轉換為全小寫,後兩個用於把字串轉換為全大寫。toLowerCase()跟toUpperCase()是原始方法,toLocaleLowerCase()跟toLocaleUpperCase()是基於特定地區實現的。樣本: 複製代碼 代碼如下:var oStringObject=new String("Hello World");
console.log(oStringObject.toLowerCase()); //outpus "hello world"
console.log(oStringObject.toLocaleLowerCase()); //outpus "hello world"
console.log(oStringObject.toUpperCase()); //outpus "HELLO WORLD"
console.log(oStringObject.toLocaleUpperCase()); //outpus "HELLO WORLD"
5、instanceof運算子
在使用typeof運算子時採用參考型別儲存值會出現一個問題,無論引用的是什麼類型的對象,它都返回"object"。ECMAScript引入了另一個運算子 instanceof 來解決這個問題。
instanceof運算子與typeof運算子相似,用於識別正在處理的對象的類型。與typeof方法不同的是,instanceof 方法要求開發人員明確地確認對象為某特定類型。樣本: 複製代碼 代碼如下:var oStringObject=new String("hello world");
alert(oStringObject instanceof String); //outpus "true"