本篇內(nèi)容介紹了“怎么避免JavaScript類型轉(zhuǎn)換”的有關(guān)知識(shí),在實(shí)際案例的操作過程中,不少人都會(huì)遇到這樣的困境,接下來就讓小編帶領(lǐng)大家學(xué)習(xí)一下如何處理這些情況吧!希望大家仔細(xì)閱讀,能夠?qū)W有所成!
在瑞安等地區(qū),都構(gòu)建了全面的區(qū)域性戰(zhàn)略布局,加強(qiáng)發(fā)展的系統(tǒng)性、市場(chǎng)前瞻性、產(chǎn)品創(chuàng)新能力,以專注、極致的服務(wù)理念,為客戶提供成都網(wǎng)站制作、成都做網(wǎng)站 網(wǎng)站設(shè)計(jì)制作按需開發(fā),公司網(wǎng)站建設(shè),企業(yè)網(wǎng)站建設(shè),品牌網(wǎng)站設(shè)計(jì),網(wǎng)絡(luò)營銷推廣,外貿(mào)網(wǎng)站建設(shè),瑞安網(wǎng)站建設(shè)費(fèi)用合理。
你是否經(jīng)歷過JavaScript中的某些值比較沒有得到預(yù)期結(jié)果的情況?
看下面的情況:
即使[]==0結(jié)果為真,if[]條件也沒有根據(jù)結(jié)果執(zhí)行。有沒有想過為什么會(huì)這樣?
本文主要說明這些值比較的工作原理以及影響它們的因素。在深入解釋之前,大家要熟悉一個(gè)概念:類型轉(zhuǎn)換。
什么是 JavaScript 類型轉(zhuǎn)換?
這也稱為類型強(qiáng)制。對(duì)于不熟悉此概念的人來說,它只是將值從一種數(shù)據(jù)類型自動(dòng)轉(zhuǎn)換為另一種數(shù)據(jù)類型。
看個(gè)例子,大家會(huì)更清楚明白。
在此示例中,定義的兩個(gè)變量具有兩種類型;字符串和數(shù)字。但是,當(dāng)我們使用 ==(非嚴(yán)格比較)進(jìn)行比較時(shí),結(jié)果為true。原因是當(dāng)我們使用==比較這兩個(gè)時(shí),JavaScript 會(huì)自動(dòng)嘗試將String類型轉(zhuǎn)換為Number類型以產(chǎn)生結(jié)果。這是一種強(qiáng)制轉(zhuǎn)換。
JavaScript中有多種強(qiáng)制類型。
Number conversions
String conversions
Boolean conversions
對(duì)象的類型轉(zhuǎn)換
類型強(qiáng)制轉(zhuǎn)換都是好的嗎?
在上述情況下,類型轉(zhuǎn)換沒有害處。但是,在許多情況下,類型強(qiáng)制會(huì)導(dǎo)致問題。
我們看下面例子。
在這里,JavaScript已將Number類型轉(zhuǎn)換為String。這與相等比較中發(fā)生的情況相反。我們預(yù)期的結(jié)果是450。但是,我們得到了String輸出。
現(xiàn)在,我們對(duì)類型轉(zhuǎn)換以及為什么要避免使用類型轉(zhuǎn)換有了清晰的了解,讓我們看看如何避免類型轉(zhuǎn)換。這是本文最重要的部分。因此,請(qǐng)坐下來,喝咖啡并集中精力??
1. 對(duì)數(shù)學(xué)運(yùn)算使用顯式轉(zhuǎn)換
如果你需要對(duì)用戶輸入或任何其他值使用數(shù)學(xué)運(yùn)算,則在執(zhí)行該運(yùn)算之前,自己進(jìn)行一次顯式轉(zhuǎn)換會(huì)更安全。這樣,可以避免任何意外行為。
2. 使用模板字面值連接字符串,而不是+
如果需要連接兩個(gè)數(shù)字,則使用模板文字會(huì)更安全。特別是不確定值的類型。
也可以使用顯式轉(zhuǎn)換來導(dǎo)出相同的結(jié)果。
3.當(dāng)比較值時(shí),使用嚴(yán)格的比較(===)
前面我們看到,當(dāng)使用==時(shí),JavaScript 會(huì)執(zhí)行隱式類型轉(zhuǎn)換,這會(huì)導(dǎo)致不一致的結(jié)果。因此,在我們的生產(chǎn)代碼中使用它是不安全的。
為了得出預(yù)期的結(jié)果,應(yīng)該始終使用===進(jìn)行比較。三等號(hào)隱含地表示:
我可以同時(shí)了解變量的值和類型
因此,如果將數(shù)字和字符串與值進(jìn)行比較,結(jié)果將是false,因?yàn)樗矔?huì)考慮變量的類型。
這是獲得預(yù)期一致結(jié)果的更安全的方法。
在JavaScript中,數(shù)據(jù)類型有兩種變體。
原始值(字符串、數(shù)字等)
非原始值(數(shù)組、對(duì)象)
到目前為止,我們已經(jīng)討論了原始數(shù)據(jù)類型的類型轉(zhuǎn)換。我提供的第一個(gè)示例涉及非原始數(shù)據(jù)類型,例如數(shù)組。
所有非原始數(shù)據(jù)類型都有一個(gè)名為.toPrimitive()的內(nèi)置函數(shù)。比較非原始值和原始值時(shí),此函數(shù)會(huì)自動(dòng)將非原始類型轉(zhuǎn)換為原始類型。在我們看過的第一個(gè)示例中,當(dāng)使用此函數(shù)進(jìn)行非嚴(yán)格比較時(shí),空數(shù)組將轉(zhuǎn)換為空字符串。確切地說,用于執(zhí)行此轉(zhuǎn)換的確切函數(shù)是toString()。因此,空數(shù)組(將轉(zhuǎn)換為空字符串)等于0。
正如我們前面所看到的,當(dāng)在if條件中檢查空數(shù)組時(shí),將執(zhí)行條件中的行。但是,如果空數(shù)組隱式轉(zhuǎn)換為0怎么辦?
這是在單獨(dú)的JavaScript條件下進(jìn)行的: 真值和虛值 。除了true以外,JavaScript 將大部分有值的視為真值,除了少數(shù)值。例如,0,-0,""被視為虛值。由于空數(shù)組不被認(rèn)為是虛值,當(dāng)在條件中檢查它時(shí),它將作為真值執(zhí)行。(這里不會(huì)發(fā)生類型轉(zhuǎn)換,空數(shù)組保留為數(shù)組,這是類型轉(zhuǎn)換不一致的另一個(gè)例子。)
JavaScript作為一種松散類型語言,執(zhí)行隱式類型轉(zhuǎn)換。這會(huì)導(dǎo)致不一致和意想不到的結(jié)果。因此,我們應(yīng)該在任何時(shí)候都避免這種類型轉(zhuǎn)換。如果不確定值的類型,可以使用typeof檢查。檢查類型可以讓我們更好地理解應(yīng)該如何進(jìn)行轉(zhuǎn)換。
“怎么避免JavaScript類型轉(zhuǎn)換”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識(shí)可以關(guān)注創(chuàng)新互聯(lián)網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實(shí)用文章!
本文名稱:怎么避免JavaScript類型轉(zhuǎn)換
當(dāng)前URL:http://www.rwnh.cn/article8/gdgeop.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供營銷型網(wǎng)站建設(shè)、虛擬主機(jī)、網(wǎng)站改版、微信公眾號(hào)、自適應(yīng)網(wǎng)站、網(wǎng)站內(nèi)鏈
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)