淺析JavaScript中的特殊數(shù)據(jù)類型
在JavaScript中,有6大數(shù)據(jù)類型,分別包括string,number,boolean,undefined,null 和 object
一、JS中的特殊類型:NaN
NaN 即Not a Number , 不是一個數(shù)字, 那么NaN到底是什么呢? 而對于JS來說,整數(shù)和浮點數(shù)都統(tǒng)稱為number 類型,除此之外,number 類型還有一個很特殊的值,即NaN,它是用來表示是否屬于number 類型的一種狀態(tài),而不是一個確切的值(所以,NaN不等于自身)。
那么,NaN值一般會在什么情況下出現(xiàn)呢?
一般有兩種情況:
(1) 一個表達式中如果有 減號(-)、乘號(*) 或 除號(/) 等運算符 時,JS引擎會在計算之前試圖將運算符兩邊的變量轉化為number類型(使用Number(x)做轉化),如果轉化失敗,表達式將返回NaN;有 加號(+)運算符 不會將其兩邊的變量轉化為number類型,這是因為JS表達式的執(zhí)行順序是按照運算符的優(yōu)先級從左到右依次進行的,如果加號(+) 兩邊的變量都是number類型時,才會做數(shù)字相加運算,如果其中有一個變量是字符串,則會將兩邊都作為字符串相加,如: 5+4+"6"="96"
(2) 直接使用 parseInt,parseFloat 或 Number 將一個非數(shù)字的值轉化為數(shù)字時,表達式返回 NaN
"abc" - 3 // NaN parseInt( "abc" ) // NaN parseFloat( "abc" ) //NaN Number( "abc" ) //NaN
對于數(shù)字+字符的值,其轉化結果會有所不同:
Number( "123abc" ); //NaN parseInt( "123abc" ); //123 parseInt( "123abc45" ); //123 parseFloat( "123.45abc" ); //123.45
這是因為Number轉化的整個值,而不是部分值,parseInt 和 parseFloat 只轉化第一個無效字符之前的字符串。
因此,當一個字符串不能被Number,parseInt,parseFloat成功轉換時,就返回NaN,表示該字符串無法被識別為數(shù)字類型,這是一個異常狀態(tài),并不是一個確切的值。
所以 NaN != NaN , 因為它是一個異常狀態(tài),而不是一個確切的值。
另外,與NaN相關的還有一個函數(shù),即 isNaN() , 它的作用是檢查一個字符串是否能被 Number() 成功轉換,即強制轉化整個字符串。
isNaN( "123" ) //false 能轉換 isNaN( "abc" ) //true 不能轉換 isNaN( "123abc" ) //true 部分可轉換,但整體不能轉換 isNaN( "123.45abc" ) //true 部分可轉換,但整體不能轉換
二、JS中還有另外兩個特殊類型:undeinfed 和 null
undefined 是JavaScript 6種數(shù)據(jù)類型中的一種,該類型只有一個值,也就是undefined。 undefined意為`未定義`,即當使用var聲明了變量但未進行賦值時,這個變量的值就是undefined,其產(chǎn)生的原因有兩種:
(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雖然也代表變量的一個狀態(tài),但這個狀態(tài)值是確定唯一的,即當一個變量聲明了但沒有賦值時,它的狀態(tài)就是undefined ,因此下面表達式是成立的:
var b; b == undefined; //true
理解了undefined 以后,再理解null 就容易多了,null類型也只有一個值:null , 表示一個變量中沒有包含有效數(shù)據(jù)。null在這里意為空值、空對象的意思,更確切的說,一個被賦值為null的變量沒有保存有效的數(shù)值、字符串、布爾、數(shù)組或對象等,可以通過給一個變量賦值為null來清空變量中的內(nèi)容。產(chǎn)生null的原因只有一個:即對一個變量顯式的賦值為null 。
var p = null ; console.log(p); //null typeof p ; // "object" typeof null ; // "object"
還是和NaN來比較,null 也是一個確定切唯一的狀態(tài)值,當一個變量被賦值為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中的特殊數(shù)據(jù)類型,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對腳本之家網(wǎng)站的支持!
相關文章
一文搞懂JSON(JavaScript Object Notation)
Json 有兩種基本的結構,即 Json對象 和 Json 數(shù)組。通過 Json 對象和 Json 數(shù)組這兩種結構的組合可以表示各種復雜的結構,今天通過本文給大家介紹JavaScript Object Notation的基本知識,感興趣的朋友一起看看吧2021-10-10
javascript 實現(xiàn) 秒殺,團購 倒計時展示的記錄 分享
這篇文章介紹了javascript 實現(xiàn) 秒殺,團購 倒計時展示的記錄方法,有需要的朋友可以參考一下2013-07-07
移動端點擊圖片放大特效PhotoSwipe.js插件實現(xiàn)
這篇文章主要為大家詳細介紹了移動端點擊圖片放大特效PhotoSwipe.js插件實現(xiàn)方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下2016-08-08
Javascript中 帶名 匿名 箭頭函數(shù)的重要區(qū)別(推薦)
這篇文章主要介紹了Javascript中 帶名 匿名 箭頭函數(shù)的重要區(qū)別,非常不錯,具有參考借鑒價值,需要的朋友參考下吧2017-01-01

