JavaScript數據類型

1、導語

ECMAScript 中有 5 種簡單數據類型:Undefined、Null、Boolean、Number 和 String。還有一種複雜數據類型——Object。ECMAScript 不支持任何創建自定義類型的機制,所有值都成爲以上 6 中數據類型之一。

2、typeof操作符

typeof 操作符是用來檢測變量的數據類型。對於值或變量使用 typeof 操作符會返回如下字符串。


var box = '張三';
alert(typeof box);
alert(typeof '張三');

typeof 操作符可以操作變量,也可以操作字面量。雖然也可以這樣使用:typeof(box),但,typeof 是操作符而非內置函數。

PS:函數在 ECMAScript 中是對象,不是一種數據類型,所以,使用 typeof 來區分 function 和 object 是非常有必要的。

3、Undefined 類型

Undefined 類型只有一個值,即特殊的 undefined。在使用 var 聲明變量,但沒有對其初始化時,這個變量的值就是 undefined。

var box;
alert(box);

4、Null類型

Null 類型是一個只有一個值的數據類型,即特殊的值 null。它表示一個空對象引用(指針),而 typeof 操作符檢測 null 會返回 object。

var box = null;
alert(typeof box);

如果定義的變量準備在將來用於保存對象,那麼最好將該變量初始化爲 null。這樣,當檢查 null 值就知道是否已經變量是否已經分配了對象引用了。

var box = null;
if(box != null) {
    alert('box 對象已存在!');
}

有個要說明的是:undefined 是派生自 null 的,因此 ECMA-262 規定對它們的相等性測試返回 true。

alert(undefined == null);

由於 undefined 和 null 兩個值的比較是相等的,所以,未初始化的變量和賦值爲 null 的變量會相等。這時,可以採用 typeof 變量的類型進行比較。但,建議還是養成編碼的規範,不要忘記初始化變量。

var box;
var car = null;
alert(typeof box == typeof car)

5、Boolean 類型

Boolean 類型有兩個值(字面量):true 和 false。

var box = true;
alert(typeof box);

6、Number 類型

Number 類型包含兩種數值:整型和浮點型。

var box = 100; 
var box = 100.5; 

NaN,即非數值(Not a Number)是一個特殊的值,這個數值用於表示一個本來要返回數值的操作數未返回數值的情況(這樣就不會拋出錯誤了)。比如,在其他語言中,任何數值除以 0都會導致錯誤而終止程序執行。但在 ECMAScript 中,會返回出特殊的值,因此不會影響程序執行。

var box = 0 / 0; //NaN
var box = 12 / 0; //Infinity
var box = 12 / 0 * 0; //NaN

可以通過 Number.NaN 得到 NaN 值,任何與 NaN 進行運算的結果均爲 NaN,NaN 與自身不相等(NaN 不與任何值相等)。

alert(Number.NaN); //NaN
alert(NaN+1); //NaN
alert(NaN == NaN) //false

ECMAScript 提供了 isNaN()函數,用來判斷這個值到底是不是 NaN。isNaN()函數在接收到一個值之後,會嘗試將這個值轉換爲數值。

alert(isNaN(NaN)); //true
alert(isNaN(25)); //false,25 是一個數值
alert(isNaN('25')); //false,'25'是一個字符串數值,可以轉成數值
alert(isNaN('Lee')); //true,'Lee'不能轉換爲數值
alert(isNaN(true)); //false true 可以轉成1

有 3個函數可以把非數值轉換爲數值:Number()、parseInt()和 parseFloat()。Number()函數是轉型函數,用於任何數據類型,而另外兩個則專門用於把字符串轉成數值。

alert(Number(true)); //1,Boolean 類型的 true 和 false 分別轉換成 1 和 0
alert(Number(25)); //25,數值型直接返回
alert(Number(null)); //0,空對象返回 0
alert(Number(undefined)); //NaN,undefined 返回 NaN

如果是字符串,應該遵循一下規則:
1.只包含數值的字符串,會直接轉成成十進制數值,如果包含前導 0,即自動去掉。

alert(Number('456')); //456
alert(Number('070')); //70

2.只包含浮點數值的字符串,會直接轉成浮點數值,如果包含前導和後導0,即自動去掉。

alert(Number('08.90')); //8.9

3.如果字符串是空,那麼直接轉成成0。

alert(Number('')); //0

4.如果不是以上三種字符串類型,則返回NaN。

alert('Lee123'); //NaN

由於 Number()函數在轉換字符串時比較複雜且不夠合理,因此在處理整數的時候更常用的是 parseInt()。

alert(parseInt('456Lee')); //456,會返回整數部分
alert(parseInt('Lee456Lee')); //NaN,如果第一個不是數值,就返回 NaN
alert(parseInt('12Lee56Lee')); //12,從第一數值開始取,到最後一個連續數值結束
alert(parseInt('56.12')); //56,小數點不是數值,會被去掉
alert(parseInt('')); //NaN,空返回 NaN

parseFloat()是用於浮點數值轉換,和 parseInt()一樣,從第一位解析到非浮點數值位置。

alert(parseFloat('123Lee')); //123,去掉不是別的部分
alert(parseFloat('123.4.5')); //123.4,只認一個小數點
alert(parseFloat('0123.400')); //123.4,去掉前後導

7、String 類型

String 類型用於表示由於零或多個 16 位 Unicode 字符組成的字符序列,即字符串。字符串可以由雙引號(")或單引號(')表示。

var box = 'Lee';
var box = "Lee";

PS:在某些其他語言(PHP)中,單引號和雙引號表示的字符串解析方式不同,而ECMAScript 中,這兩種表示方法沒有任何區別。但要記住的是,必須成對出現,不能穿插使用,否則會出錯。

var box = '張三"; //出錯

String 類型包含了一些特殊的字符字面量,也叫轉義序列



ECMAScript 中的字符串是不可變的,也就是說,字符串一旦創建,它們的值就不能改變。要改變某個變量保存的字符串,首先要銷燬原來的字符串,然後再用另一個包含新值的字符串填充該變量。

var box = 'Mr.';
box = box + ' Lee';

toString()方法可以把值轉換成字符串。

var box = 11;
var box = true;
alert(typeof box.toString());

如果在轉型之前不知道變量是否是 null 或者 undefined 的情況下,我們還可以使用轉型函數 String(),這個函數能夠將任何類型的值轉換爲字符串。

var box = null;
alert(String(box));

PS:如果值有 toString()方法,則調用該方法並返回相應的結果;如果是 null 或者undefined,則返回"null"或者"undeinfed"。

8、Object 類型

ECMAScript 中的對象其實就是一組數據和功能的集合。對象可以通過執行 new 操作符後跟要創建的對象類型的名稱來創建。

var box = new Object();
var box = new Object;//不推薦

Object()裏可以任意傳參,可以傳數值、字符串、布爾值等。而且,還可以進行相應的計算。

var box = new Object(2); //Object 類型,值是 2
var age = box + 2; //可以和普通變量運算
alert(age); //輸出結果,轉型成 Number 類型了

既然可以使用 new Object()來表示一個對象,那麼我們也可以使用這種 new 操作符來創建其他類型的對象。

var box = new Number(5); //new String('Lee')、new Boolean(true)
alert(typeof box); //Object 類型
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章