本篇文章帶給大家的內容是關於什麼是隱式型別轉換? js隱式類型轉換的介紹,有一定的參考價值,有需要的朋友可以參考一下,希望對你有幫助。
JavaScript的資料型別非常弱,使用算術運算子時,運算子兩邊的資料型別可以是任意的,例如,一個字串可以和數字相加。之所以不同的資料型別之間可以做運算,是因為JavaScript引擎在運算之前會悄悄的把他們進行了隱式型別轉換的,如下是數值型別和布林型別的相加:
1 2 |
|
結果是一個數值型!如果是在C或Java環境的話,上面的運算會因為運算子兩邊的資料型別不一致而導致報錯,但是,在JavaScript中,只有少數情況下,錯誤型別才會導致出錯,例如呼叫非函數,或讀取null或undefined的屬性時,如下:
1 2 3 4 |
|
多數情況下,JavaScript都不會出錯的,而是自動的進行對應的類型轉換。例如-, *, /,和%等算術運算子都會把操作數轉換成數字的,但是「 」號就有點不一樣了,有些情況下,它是算術加號,有些情況下,是字串連接符號,具體的要看它的操作數,如下:
1 2 3 4 |
|
但是,如果字串和數字相加,JavaScript會自動把數字轉換成字元的,不管數字在前還是字串在前,如下:
1 2 3 4 |
|
字串和數字相加結果是字串!
這需要注意的是,「」的運算方向是從左到右的,如下:
1 2 |
|
這與下面是等價的:
1 2 |
|
相比之下,下面的結果是不一樣的:
1 2 |
|
但是,隱式類型轉換,有時候,會隱藏一些錯誤的,比如,null會轉換成0,undefined會轉換成NaN。需要注意的是,NaN和NaN是不相等的(這是由於浮點數的精度決定的),如下:
1 2 |
|
雖然,JavaScript提供了isNaN來檢測某個值是否為NaN,但是,這是不太精確的,因為在呼叫isNaN函數之前,本身就存在了一個隱式轉換的過程,它會把那些原本不是NaN的值轉換成NaN的,如下:
1 2 3 4 |
|
上面程式碼,我們使用isNaN來測試後,發現字串,undefined,甚至對象,結果都回傳真! ! !但是他們不是NaN。
總而言之:isNaN檢測NaN並不可靠! ! !
有一個可靠的並且準確的方法可以檢測NaN。
我們都知道,只有NaN是自己不等自己的,可以用不等於號(!==)來判斷一個數是否等於自身,從而,可以檢測到NaN了,如下:
1 2 3 4 5 6 7 8 9 10 |
|
我們也可以把這個模式定義成一個函數,如下:
1 2 3 |
|
物件是可以轉換成原始值的,最常見的方法就是把它轉換成字串,如下:
1 2 |
|
物件轉換成字串是呼叫了他的toSting函數的,你可以手動的呼叫它來檢測一下:
1 2 |
|
類似的,物件也是可以轉換成數字的,他是透過value Of函數的,當然,你也可以自訂這個value Of函數,如下:
1 2 |
|
如果,一個物件同時存在valueOf方法和toString方法,那麼,value Of方法總是會被優先呼叫的,如下:
1 2 3 4 5 6 7 8 9 |
|
一般的,盡可能使value Of和toString表示的值相同(儘管類型可以不同)。
最後一種強制型別轉換,我們常稱為“真值運算”,例如,if, ||, &&,他們的運算元不一定是布林型的額。 JavaScript會透過簡單的轉換規則,將一些非布林類型的值轉換成布林型的。大多數的值都會轉換成true,只有少數的是false,他們分別是:false, 0, -0, "", NaN, null, undefined,因為存在數字和字串以及物件的值為false,所以,直接用真值轉換來判斷一個函數的參數是否傳進來了,這是不不太安全的。例如,有一個可以具有預設值得可選參數的函數,如下:
1 2 3 4 5 6 7 8 9 |
|
這個函數會忽略任何的真值為假的參數的,包括0,-0;
1 |
|
檢測undefined的更準確的方法是用typeof操作:
1 2 3 4 5 6 7 8 9 |
|
這種寫法,可以區分開0和undefined的:
1 2 |
|
另外一種方法是利用參數跟undefined作比較,如下:
1 |
|
總結:
1. 類型錯誤有可能會被型別轉換所隱藏。
2. “ ”既可以表示字串連接,又可以表示算術加,這取決於它的操作數,如果有一個為字串的,那麼,就是字串連接了。
3. 物件透過value Of方法,把自己轉換成數字,透過toString方法,把自己轉換成字串。
4.具有value Of方法的對象,應該定義一個對應的toString方法,用來傳回相等的數字的字串形式。
5.偵測一些未定義的變數時,應該使用type Of或與undefined作比較,而不應該直接用真值運算。
相關推薦:
簡單介紹JavaScript資料型別之隱式型別轉換_javascript技巧
以上是什麼是隱式型別轉換? js隱式類型轉換的介紹的詳細內容。更多資訊請關注PHP中文網其他相關文章!