JavaScript 隱式資料型別轉換
隱式資料型別轉換,就是程式碼可以根據上下文自動進行資料型別轉換。
更多資料型別轉換內容參閱JavaScript 資料型別轉換一章節。
看如下程式碼例項:
[JavaScript] 純文字檢視 複製程式碼執行程式碼let str="8"; console.log(typeof str); console.log(typeof +str); console.log(typeof Number(str));
程式碼執行效果截圖如下:
程式碼分析如下:
(1).宣告一個變數並賦值為"8",變數值是一個字串。
(2).typeof str返回值為字串,這個沒有任何問題。
(3).typeof +str返回numer,這是因為+str可以執行隱式資料型別轉換,我們並沒有刻意去轉換資料型別,但是JavaScript內部在遇到此運算上下文時,會自動嘗試將字串轉換為數值型別。
(4).最後一個則是顯式資料型別轉換,Number就是用來將引數轉換為數值型別的。
隱式資料型別轉換規則:
下面是比較常見的隱式資料型別轉換,當然更多的規則需要自己不斷的積累。
1.加號用作二元運算子:
加號(+)是一個多面手,可以用於算數計算,也可以進行字串連線。
如果兩個運算元中有一個是引用型別資料,也就是物件,那麼首先會將物件轉換為值型別資料。
如果運算元中,有一個是字串,那麼會將另一個操作轉換為字串,執行字串連線操作。程式碼例項如下:
[JavaScript] 純文字檢視 複製程式碼執行程式碼console.log("8"+1); console.log([8]+1);
程式碼執行效果截圖如下:
程式碼分析如下:
(1)."8"是字串,那麼會隱式將1也轉換為字串,然後執行字串連線操作。
(2).[8]是引用型別資料,那麼首先會將其轉換為值型別,首先嚐試呼叫valueOf方法,轉換失敗,然後再呼叫toString方法,轉換為字串"8",然後再將數字1轉換為字串,最後執行字串連線操作。
2.加號作為一元運算子:
如果運算元是物件,首先將其轉換為值型別資料,然後再將其轉換為數字,轉換失敗返回NaN。
[JavaScript] 純文字檢視 複製程式碼執行程式碼console.log(typeof +[8]
程式碼執行效果截圖如下:
首先將陣列轉換為字串"8",然後再將其轉換為數字。
3.等號運算子(==):
是兩個等號,不是三個等號,三個等號是全等運算子,不執行資料型別轉換。
關於全等運算子相關內容可以參閱如下兩篇文章:
(1).JavaScript 三個等號 === 全等運算子一章節。
(2).JavaScript == 等號運算子一章節。
轉換規則如下:
(1).如果是數字和字串之間的比較,則將字串轉換為數字。
(2).如果是布林值之間的比較true轉換為1,false轉換為0。
(3).如果運算元中存在物件,則先將物件轉換為值型別資料,再進行比較。
4.減號作為二元運算子:
如果運算元是物件,首先將其轉換為值型別資料,然後再將其轉換為數字,轉換失敗返回NaN。
[JavaScript] 純文字檢視 複製程式碼執行程式碼console.log([8]-5);
程式碼執行效果截圖如下:
首先將陣列轉換為值型別資料"8",然後再將其轉換為數字。
5.減號作為一元運算子:
如果運算元是物件,首先將其轉換為值型別資料,然後再將其轉換為數字,轉換失敗返回NaN。
最後會改變數字的符號,程式碼例項如下:
[JavaScript] 純文字檢視 複製程式碼執行程式碼console.log(-[8]);
程式碼執行效果截圖如下:
6.>、>=、<、<=:
能夠利上述運算子的運算元只能是數字或者字串是。
所以如有需要,就要進行隱式資料型別轉換,轉換規則如下:
(1).如果運算元具有物件,那麼首先將其轉換為值型別資料。
(2).轉換後,如果兩個運算元都是字串,那麼進行碼值比較,參閱JavaScript 字串比較大小一文。
(3).如果運算元中存在非字串資料,那麼首先將它們轉換為數值,再比較,如果有運算元轉換失敗,此運算元返回NaN,最終結果返回false。
僅以大於號為例子做一下演示:
[JavaScript] 純文字檢視 複製程式碼執行程式碼console.log(new Date >5); console.log([6]>5);
程式碼執行效果截圖如下:
程式碼分析如下:
(1).首先將Date物件轉換為值型別,會呼叫valueOf方法,返回值是時間戳,很明顯大於5。
(2).數字會首先被轉換為字串"6",然後將其轉換為6,再比較大小。
7.*、/、%、!:
*、/與%運算子首先會將運算元轉換為數值,再進行運算。
如果運算元轉換為數值失敗,那麼運算元返回NaN。
對於!運算子,會將運算元轉換為布林值,具體轉換規則參閱JavaScript 資料型別轉換一文。
相關文章
- JavaScript隱式型別轉換JavaScript型別
- Java資料型別的顯式轉換和隱式轉換Java資料型別
- 【關於Javascript】--- 隱式型別轉換篇JavaScript型別
- JavaScript 資料型別轉換JavaScript資料型別
- javascript資料型別轉換JavaScript資料型別
- 資料型別隱式轉換導致的阻塞資料型別
- javascript中隱私型別轉換JavaScript型別
- JavaScript 基本資料型別轉換JavaScript資料型別
- JavaScript資料型別轉換總結JavaScript資料型別
- JavaScript資料型別分析及其轉換JavaScript資料型別
- javascript 隱式轉換JavaScript
- 如何實現隱式型別轉換型別
- SQL Server資料庫中的資料型別隱式轉換問題SQLServer資料庫資料型別
- JavaScript 隱性型別轉換步驟淺析JavaScript型別
- C語言的隱式型別轉換C語言型別
- 資料型別,型別轉換資料型別
- sql server 資料型別轉換函式SQLServer資料型別函式
- c++隱式型別轉換存在的陷阱C++型別
- 資料型別轉換資料型別
- 建構函式定義的隱式型別轉換函式型別
- 5.JavaScript資料型別之間的轉換JavaScript資料型別
- 徹底理解c++的隱式型別轉換C++型別
- Java資料型別及型別轉換Java資料型別
- 33 個 JavaScript 核心概念系列(三): 顯式 (名義) 與 隱式 (鴨子)型別轉換JavaScript型別
- 【Java】資料型別轉換Java資料型別
- 資料型別及轉換資料型別
- 3. php資料型別、資料型別轉換PHP資料型別
- oracle資料隱式轉換規則Oracle
- golang 快速入門 [8.4]-常量與隱式型別轉換Golang型別
- 玩轉 JavaScript 之資料型別JavaScript資料型別
- JS資料型別的轉換JS資料型別
- JS中資料型別轉換JS資料型別
- 2、java資料型別轉換Java資料型別
- 前端面試官必問系列之隱式型別轉換前端面試型別
- 說說JavaScript的型別轉換JavaScript型別
- JavaScript 字串轉換數值型別JavaScript字串型別
- JavaScript核心概念(1):型別轉換JavaScript型別
- 淺談JavaScript的型別轉換JavaScript型別