新聞中心
文本已經(jīng)過原作者 Viduni Wickramarachchi 授權翻譯。

創(chuàng)新互聯(lián)公司專注于企業(yè)成都營銷網(wǎng)站建設、網(wǎng)站重做改版、羅甸網(wǎng)站定制設計、自適應品牌網(wǎng)站建設、H5場景定制、商城網(wǎng)站開發(fā)、集團公司官網(wǎng)建設、成都外貿(mào)網(wǎng)站建設公司、高端網(wǎng)站制作、響應式網(wǎng)頁設計等建站業(yè)務,價格優(yōu)惠性價比高,為羅甸等各大城市提供網(wǎng)站開發(fā)制作服務。
你是否經(jīng)歷過JavaScript中的某些值比較沒有得到預期結果的情況?
看下面的情況:
即使[]==0結果為真,if[]條件也沒有根據(jù)結果執(zhí)行。有沒有想過為什么會這樣?
本文主要說明這些值比較的工作原理以及影響它們的因素。在深入解釋之前,大家要熟悉一個概念:類型轉換。
什么是 JavaScript 類型轉換?
這也稱為類型強制。對于不熟悉此概念的人來說,它只是將值從一種數(shù)據(jù)類型自動轉換為另一種數(shù)據(jù)類型。
看個例子,大家會更清楚明白。
在此示例中,定義的兩個變量具有兩種類型;字符串和數(shù)字。但是,當我們使用 ==(非嚴格比較)進行比較時,結果為true。原因是當我們使用==比較這兩個時,JavaScript 會自動嘗試將String類型轉換為Number類型以產(chǎn)生結果。這是一種強制轉換。
JavaScript中有多種強制類型。
- Number conversions
- String conversions
- Boolean conversions
- 對象的類型轉換
類型強制轉換都是好的嗎?
在上述情況下,類型轉換沒有害處。但是,在許多情況下,類型強制會導致問題。
我們看下面例子。
在這里,JavaScript已將Number類型轉換為String。這與相等比較中發(fā)生的情況相反。我們預期的結果是450。但是,我們得到了String輸出。
現(xiàn)在,我們對類型轉換以及為什么要避免使用類型轉換有了清晰的了解,讓我們看看如何避免類型轉換。這是本文最重要的部分。因此,請坐下來,喝咖啡并集中精力??
如何避免 JavaScript 類型轉換
1. 對數(shù)學運算使用顯式轉換
如果你需要對用戶輸入或任何其他值使用數(shù)學運算,則在執(zhí)行該運算之前,自己進行一次顯式轉換會更安全。這樣,可以避免任何意外行為。
2. 使用模板字面值連接字符串,而不是+
如果需要連接兩個數(shù)字,則使用模板文字會更安全。特別是不確定值的類型。
也可以使用顯式轉換來導出相同的結果。
3.當比較值時,使用嚴格的比較(===)
前面我們看到,當使用==時,JavaScript 會執(zhí)行隱式類型轉換,這會導致不一致的結果。因此,在我們的生產(chǎn)代碼中使用它是不安全的。
為了得出預期的結果,應該始終使用===進行比較。三等號隱含地表示:
我可以同時了解變量的值和類型
因此,如果將數(shù)字和字符串與值進行比較,結果將是false,因為它也會考慮變量的類型。
這是獲得預期一致結果的更安全的方法。
在JavaScript中,數(shù)據(jù)類型有兩種變體。
- 原始值(字符串、數(shù)字等)
- 非原始值(數(shù)組、對象)
到目前為止,我們已經(jīng)討論了原始數(shù)據(jù)類型的類型轉換。我提供的第一個示例涉及非原始數(shù)據(jù)類型,例如數(shù)組。
所有非原始數(shù)據(jù)類型都有一個名為.toPrimitive()的內(nèi)置函數(shù)。比較非原始值和原始值時,此函數(shù)會自動將非原始類型轉換為原始類型。在我們看過的第一個示例中,當使用此函數(shù)進行非嚴格比較時,空數(shù)組將轉換為空字符串。確切地說,用于執(zhí)行此轉換的確切函數(shù)是toString()。因此,空數(shù)組(將轉換為空字符串)等于0。
正如我們前面所看到的,當在if條件中檢查空數(shù)組時,將執(zhí)行條件中的行。但是,如果空數(shù)組隱式轉換為0怎么辦?
這是在單獨的JavaScript條件下進行的: 真值和虛值 。除了true以外,JavaScript 將大部分有值的視為真值,除了少數(shù)值。例如,0,-0,""被視為虛值。由于空數(shù)組不被認為是虛值,當在條件中檢查它時,它將作為真值執(zhí)行。(這里不會發(fā)生類型轉換,空數(shù)組保留為數(shù)組,這是類型轉換不一致的另一個例子。)
總結
JavaScript作為一種松散類型語言,執(zhí)行隱式類型轉換。這會導致不一致和意想不到的結果。因此,我們應該在任何時候都避免這種類型轉換。如果不確定值的類型,可以使用typeof檢查。檢查類型可以讓我們更好地理解應該如何進行轉換。
~完,我是刷碗智,我要去刷碗了,骨的白~
作者:Viduni Wickramarachchi 譯者:前端小智 來源:stackabuse
原文:https://blog.bitc.io/how-to-avoid-javascript-type-conversions-29e1258f37d8
本文轉載自微信公眾號「大遷世界」,可以通過以下二維碼關注。轉載本文請聯(lián)系大遷世界公眾號。
網(wǎng)站題目:如何避免JavaScript類型轉換
本文鏈接:http://fisionsoft.com.cn/article/dpccdsd.html


咨詢
建站咨詢
