JS中的資料型別
資料型別
JavaScript中包含5種簡單資料型別:Boolean、Number、String、Undefined、Null。還有一種複雜資料型別Object。Object是一種物件型別,包括:Object、Function、String、Number、Boolean、Array、Regexp、Date、 Globel、Math、Error,以及宿主環境提供的Object型別。
typeof運算子
typeof運算子用來檢測表示式的型別,其結果為一個表示該表示式資料型別的字串。
表示式值 | 返回結果 |
---|---|
Undefined | "undefined" |
Null | "object" |
Boolean | "boolean" |
Number | "number" |
String | "string" |
Object(沒有實現[[Call]]屬性的內建物件) | "object" |
Object(實現了[[Call]]屬性的內建物件) | "function" |
Object(host物件) | 由實現決定 |
Undefined資料型別
Undefined資料型別只有一個值,那就是undefined(注意區分大小寫)。當定義了一個變數而未對該變數賦值時,那麼該變數的值就是undefined。
var a;
alert(a); //"undefined"
Null資料型別
Null資料型別僅有一個值,就是null(注意區分大小寫)。從邏輯角度來看,null值表示一個空物件指標,而這也正是使用typeof操作符檢測null時會返回"object"的原因。
var a = null;
alert(typeof a); //"object"
但是實際上並非因為null是"object",而是歷史遺留問題。JS創始人也曾討論並嘗試修復typeof null === "null", 但在V8引擎中實現後導致大量問題,因此提案被拒絕。詳情參見:http://wiki.ecmascript.org/doku.php?id=harmony:typeof_null
null值可以用在很多情況下,例如:
- 表明變數還沒接收到值。
- 變數不在包含值。
- 作為函式的返回值,表明函式沒有可以返回的值。
- 作為函式的一個引數,表明省略了一個引數。
此外如果定義的變數準備在將來用於儲存物件,那麼最好將該變數初始化為null而不是其他值。這樣一來,只要直接檢測null值就可以知道相應的變數是否已經儲存了一個物件的引用了。
if (a != null){
//對a進行的操作
}
實際上,undefined值是派生自null值的,因此ECMA-262規定對它們的相等性測試要返回true。
alert(null==undefined);
Boolean資料型別
Boolean為邏輯資料型別,僅有兩個值:true和false。在JS中所有的資料型別都可以轉化成這兩個Boolean值。要將一個值轉化成Boolean值,可以呼叫Boolean()。
var a = "";
alert(Boolean(a)); //false
資料型別 | 轉換成true值 | 轉換成false值 |
---|---|---|
Boolean | true | false |
String | 任何非空字串 | "" |
Number | 任何非零數字值 | 0和NaN |
Null | null | |
Object | 任何物件 | |
Undefined | undefined |
Number資料型別
數字是雙精度浮點值,浮點值即是帶有小數點的數字。有兩個常數需要注意。
Infinity
Infinity表示正無窮大,例如一個正數除以0就會返回正無窮大。NaN
NaN表示非數字,這是一個具有IEEE-754標準值的預定義變數。NaN本身有兩個非同尋常的特點。首先,任何涉及NaN的操作(例如NaN/10)都會返回NaN,這個特點在多步計算中有可能導致問題。其次,NaN與任何值都不相等,包括NaN本身。
alert(NaN/2); //NaN
alert(NaN==NaN); //false
String資料型別
String型別用於表示由零或多個16位Unicode字元組成的字元序列,即字串。字串可以由單引號(')或雙引號(")表示。
對於某些特殊的字元,需要使用字串轉義。詳情請見:JS中的轉義字元
要將一個值轉換成字串有兩種方法:
(1)使用數值、布林值、物件和字串值的toString()方法。但null和undefined值沒有這個方法。
(2)在不知道要轉換的值是不是null或undefined的情況下,還可以使用轉型函式String()。
這個函式能夠將任何型別的值轉換為字串。String()函式遵循下列轉換規則:
- 如果值有toString()方法,則呼叫該方法(沒有引數)並返回相應的結果
- 如果值是null,則返回"null"
- 如果值是undefined,則返回"undefined"
Object資料型別
物件其實就是一組資料和功能的集合。
屬性和方法 | 解釋 |
---|---|
constructor | 對一個JavaScript函式的引用,該函式是物件的建構函式。 |
hasOwnProperty( ) | 檢查物件是否有區域性定義的(非繼承的)、具有特定名字的屬性。 |
isPrototypeOf( ) | 檢查物件是否是指定物件的原型。 |
propertyIsEnumerable( ) | 檢查指定的屬性是否存在,以及是否能用for/in迴圈列舉。 |
toLocaleString( ) | 返回物件地方化的字串表示。該方法的預設實現只調用toString()方法,但子類可以覆蓋它,提供本地化。 |
toString( ) | 返回物件的字串表示。Object類提供的該方法的實現相當普通,並且沒有提供更多有用的資訊。Object的子類通過定義自己的toString()方法覆蓋了這一方法(toString()方法能夠生成更有用的結果)。 |
valueOf( ) | 返回物件的原始值(如果存在)。對於型別為Object的物件,該方法只返回物件自身。Object的子類(如Number和Boolean)覆蓋了該方法,返回的是與物件相關的原始數值。 |