1. 程式人生 > >JS中的資料型別

JS中的資料型別

資料型別

JavaScript中包含5種簡單資料型別:Boolean、Number、String、Undefined、Null。還有一種複雜資料型別Object。Object是一種物件型別,包括:Object、Function、String、Number、Boolean、Array、Regexp、Date、 Globel、Math、Error,以及宿主環境提供的Object型別。

typeof運算子

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
資料型別與Boolean值對應表
資料型別 轉換成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資料型別

物件其實就是一組資料和功能的集合。

Object物件的屬性和方法
屬性和方法 解釋
constructor 對一個JavaScript函式的引用,該函式是物件的建構函式。
hasOwnProperty( ) 檢查物件是否有區域性定義的(非繼承的)、具有特定名字的屬性。
isPrototypeOf( ) 檢查物件是否是指定物件的原型。
propertyIsEnumerable( ) 檢查指定的屬性是否存在,以及是否能用for/in迴圈列舉。
toLocaleString( ) 返回物件地方化的字串表示。該方法的預設實現只調用toString()方法,但子類可以覆蓋它,提供本地化。
toString( ) 返回物件的字串表示。Object類提供的該方法的實現相當普通,並且沒有提供更多有用的資訊。Object的子類通過定義自己的toString()方法覆蓋了這一方法(toString()方法能夠生成更有用的結果)。
valueOf( ) 返回物件的原始值(如果存在)。對於型別為Object的物件,該方法只返回物件自身。Object的子類(如Number和Boolean)覆蓋了該方法,返回的是與物件相關的原始數值。