天天看點

JavaScript怪異的類型

typeof運算符可以用來檢查類型,如:

var car = {
        model:"baba",
        color:"red"
 };
 alert(typeof car);      

結果是object。

1.undefined

對于任何未初始化的東西,都會将undefined賦給它,undefined的類型是undefined,是不是很怪異。

可以将變量賦為null,如var minicar = null;這個null與undefined是不是有點重複呢?其實,JavaScript剛出來時,認為要用一個值(undefined)表示變量還未初始化,用另一個值(null)表示沒有對象可賦給變量。是以,記住它們各自的用途就好。

(1)undefined用于表示變量未初始化,typeof undefined的結果是undefined。

(2)null用于表示對象不存在,typeof null的結果是object。

2.NaN

JavaScript使用NaN,Not a Number的縮寫,表示它無法表示的數值結果。NaN是不是你很怪異。它還有一個更怪異的地方,NaN不僅用于表示所有無法表示的數值,還是JavaScript中唯一一個與自己不相等的值!

if(NaN != NaN){  //他們真的不相等
    alert("我們真的不想等!");
}      

NaN的正确用法

NaN與任何東西,包括它自己都不相等,是以不能以任何方式檢查變量與NaN是否相等,除了使用特殊函數isNaN.

if(isNaN(myNum)){
  alert("myNum said:"I am really a number");
}      

事實上,NaN是一個很糟糕的名字,與其稱之為“不是數字”,還不如稱之為“無法表示的數字”。typeof NaN的結果是number

在JavaScript中,infinity指的任何超過浮點數上限而言,-infinity指的任何超過浮點數下限而言,怪異的地方就是infinity-infinity的結果是NaN。

比較

告訴你們一個大事實:“99” == 99 是相等的。為什麼可以這樣呢?JavaScript會按以下規則來比較:

(1)如果兩個值的類型相同,就直接進行比較。

(2)如果兩個值的類型不同,則嘗試将它們轉換為相同的類型,再進行比較。

如果将布爾值和數字、null和undefined或其他值進行比較呢,JavaScript會作如何轉換,然後再進行比較呢?其實,JavaScript規範包含一套非常簡單的規則,指定了對兩個不同類型的值進行比較時,将如何進行轉換,如果你能記住這些規則,你就能掌握JavaScript比較的工作原理,其他類型的程式設計語言通常不自動進行轉換,而JavaScript則會自動轉換。

相等符号有兩個"=="(相等)和“===”(嚴格相等)。**===(嚴格相等)涉及的規則隻有一條:當且僅當兩個值的類型和值都相同時,它們才嚴格相等。**同樣也有!==和!=,但前者比後者嚴格。

3.JavaScript将視以下五個值為false

繼續閱讀