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

引言我知道你可能會覺得奇怪,JavaScript、C 和瀏覽器之間到底有什麼關係?它們之間看似毫無關聯,但實際上,它們在現代網絡開發中扮演著非常重要的角色。今天我們就來深入探討一下這三者之間的緊密聯繫。通過這篇文章,你將了解到JavaScript如何在瀏覽器中運行,C 在瀏覽器引擎中的作用,以及它們如何共同推動網頁的渲染和交互。 JavaScript與瀏覽器的關係我們都知道,JavaScript是前端開發的核心語言,它直接在瀏覽器中運行,讓網頁變得生動有趣。你是否曾經想過,為什麼JavaScr

Node.js擅長於高效I/O,這在很大程度上要歸功於流。 流媒體匯總處理數據,避免內存過載 - 大型文件,網絡任務和實時應用程序的理想。將流與打字稿的類型安全結合起來創建POWE

Python和JavaScript在性能和效率方面的差異主要體現在:1)Python作為解釋型語言,運行速度較慢,但開發效率高,適合快速原型開發;2)JavaScript在瀏覽器中受限於單線程,但在Node.js中可利用多線程和異步I/O提升性能,兩者在實際項目中各有優勢。

JavaScript起源於1995年,由布蘭登·艾克創造,實現語言為C語言。 1.C語言為JavaScript提供了高性能和系統級編程能力。 2.JavaScript的內存管理和性能優化依賴於C語言。 3.C語言的跨平台特性幫助JavaScript在不同操作系統上高效運行。

JavaScript在瀏覽器和Node.js環境中運行,依賴JavaScript引擎解析和執行代碼。 1)解析階段生成抽象語法樹(AST);2)編譯階段將AST轉換為字節碼或機器碼;3)執行階段執行編譯後的代碼。

Python和JavaScript的未來趨勢包括:1.Python將鞏固在科學計算和AI領域的地位,2.JavaScript將推動Web技術發展,3.跨平台開發將成為熱門,4.性能優化將是重點。兩者都將繼續在各自領域擴展應用場景,並在性能上有更多突破。

Python和JavaScript在開發環境上的選擇都很重要。 1)Python的開發環境包括PyCharm、JupyterNotebook和Anaconda,適合數據科學和快速原型開發。 2)JavaScript的開發環境包括Node.js、VSCode和Webpack,適用於前端和後端開發。根據項目需求選擇合適的工具可以提高開發效率和項目成功率。

是的,JavaScript的引擎核心是用C語言編寫的。 1)C語言提供了高效性能和底層控制,適合JavaScript引擎的開發。 2)以V8引擎為例,其核心用C 編寫,結合了C的效率和麵向對象特性。 3)JavaScript引擎的工作原理包括解析、編譯和執行,C語言在這些過程中發揮關鍵作用。


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

SublimeText3 Linux新版
SublimeText3 Linux最新版

WebStorm Mac版
好用的JavaScript開發工具

Dreamweaver Mac版
視覺化網頁開發工具

SublimeText3 英文版
推薦:為Win版本,支援程式碼提示!

禪工作室 13.0.1
強大的PHP整合開發環境