在JavaScript中,有6大資料類型,分別包含string,number,boolean,undefined,null 和 object。以下透過本文為大家介紹JavaScript中的特殊資料類型,需要的朋友參考下吧,希望能幫助大家。
一、JS中的特殊型別:NaN
NaN 即Not a Number , 不是一個數字, 那麼NaN到底是什麼呢? 而對於JS來說,整數和浮點數都統稱為number 類型,除此之外,number 類型還有一個很特殊的值,即NaN,它是用來表示是否屬於number 類型的一種狀態,而不是一個確切的值(所以,NaN不等於自身)。
那麼,NaN值一般會在什麼情況下出現呢?
一般有兩種情況:
(1) 一個表達式中如果有減號(-)、乘號(*) 或除號(/) 等運算子時,JS引擎會在計算之前試圖將運算子兩邊的變數轉換為number類型(使用Number(x)做轉換),如果轉換失敗,則表達式將傳回NaN;有加號(+)運算子不會將其兩邊的變數轉換為number類型,這是因為JS表達式的執行順序是按照運算子的優先權從左到右依序進行的,如果加號(+) 兩邊的變數都是number型別時,才會做數字相加運算,如果其中有一個變數是字串,則會將兩邊都作為字串相加,如: 5+4+"6"="96"
(2) 直接使用parseInt,parseFloat或Number 將一個非數字的值轉換為數字時,表達式會傳回NaN
"abc" - 3 // NaN parseInt( "abc" ) // NaN parseFloat( "abc" ) //NaN Number( "abc" ) //NaN
對於數字+字元的值,其轉換結果會有所不同:
Number( "123abc" ); //NaN parseInt( "123abc" ); //123 parseInt( "123abc45" ); //123 parseFloat( "123.45abc" ); //123.45
這是因為Number轉換的整個值,而不是部分值,parseInt 和parseFloat 只轉換第一個無效字元之前的字串。
因此,當一個字串不能被Number,parseInt,parseFloat成功轉換時,就回傳NaN,表示該字串無法被識別為數字類型,這是一個異常狀態,並不是一個確切的值。
所以 NaN != NaN , 因為它是一個異常狀態,而不是一個確切的值。
另外,與NaN相關的還有一個函數,即 isNaN() , 它的作用是檢查一個字串是否能被 Number() 成功轉換,即強制轉化整個字串。
isNaN( "123" ) //false 能转换 isNaN( "abc" ) //true 不能转换 isNaN( "123abc" ) //true 部分可转换,但整体不能转换 isNaN( "123.45abc" ) //true 部分可转换,但整体不能转换
二、JS中還有另外兩個特殊類型:undeinfed 和null
undefined 是JavaScript 6種資料類型中的一種,該類型只有一個值,也就是undefined。 undefined意為`未定義`,即當使用var宣告了變數但未進行賦值時,這個變數的值就是undefined,其產生的原因有兩種:
(1)存取物件不存在的屬性或方法
(2)宣告了變數但從未賦值
var v1,obj = {}; console.log(v1); //undefined console.log(obj. get ); //undefined typeof v1; // "undefined" typeof v2; // "undefined" typeof obj. get ; // "undefine" typeof obj ; // "object"
和NaN不同的是,undefined雖然也代表變數的一個狀態,但這個狀態值是決定唯一的,即當一個變數宣告了但沒有賦值時,它的狀態就是undefined ,因此下面表達式是成立的:
var b; b == undefined; //true
理解了undefined 以後,再理解null 就容易多了,null型別也只有一個值:null , 表示一個變數中沒有包含有效資料。 null在這裡意為空值、空物件的意思,更確切的說,一個被賦值為null的變數沒有保存有效的數值、字串、布林、陣列或物件等,可以透過給一個變數賦值為null來清空變數中的內容。產生null的原因只有一個:即對一個變數明確的賦值為null 。
var p = null ; console.log(p); //null typeof p ; // "object" typeof null ; // "object"
還是和NaN來比較,null 也是一個確定切唯一的狀態值,當一個變數被賦值為null時,那麼它就和null相等,因此下面表達式也是成立的:
var obj = null ; obj == null ; //true
#另外:
var v1 = null; var v2; console.log(v1 + 1 ); // 1 console.log(v2 + 1 ); //NaN var i = i +1; var j = i+ 1; console.log(i); // NaN console.log(j ); //NaN console.log(i == j ); //false##相關推薦:
以上是JavaScript中的特殊資料型別詳解的詳細內容。更多資訊請關注PHP中文網其他相關文章!