深入理解JavaScript強(qiáng)制類(lèi)型轉(zhuǎn)換
一、強(qiáng)制類(lèi)型轉(zhuǎn)換
強(qiáng)制類(lèi)型轉(zhuǎn)換是指將一種數(shù)據(jù)類(lèi)型轉(zhuǎn)
換為另一種數(shù)據(jù)類(lèi)型
的過(guò)程。在JavaScript中,這種轉(zhuǎn)換可以是顯式
(調(diào)用轉(zhuǎn)換函數(shù))的或隱式
的
基本類(lèi)型轉(zhuǎn)換
主要涉及三種基本類(lèi)型:字符串、數(shù)字和布爾值
轉(zhuǎn)換為字符串
將值轉(zhuǎn)換為字符串有多種方式,其中最常見(jiàn)的是通過(guò)調(diào)用String()函數(shù)
或使用加號(hào)運(yùn)算符(+)與空字符串
相加 或者ES6的模板字符串 ‘ `` ’ 。
let num = 123; let str = String(num); // 顯式轉(zhuǎn)換 let str2 = num + ''; // 隱式轉(zhuǎn)換 console.log(str); // "123" console.log(str2); // "123"
轉(zhuǎn)換為數(shù)字
將值轉(zhuǎn)換為數(shù)字也有多種方式,可以使用Number()函數(shù)、加號(hào)運(yùn)算符(+)、乘號(hào)運(yùn)算符 *、parseInt()或parseFloat()等
let str = "456"; let num = Number(str); // 顯式轉(zhuǎn)換 let num2 = +str; // 隱式轉(zhuǎn)換 console.log(num); // 456 console.log(num2); // 456
parseInt
()和parseFloat()
用于解析字符串中的數(shù)字
,但它們與Number()
有所不同,因?yàn)樗鼈?code>不會(huì)處理非數(shù)值字符并且可以解析帶有小數(shù)點(diǎn)的字符串。
let str = "3.14"; console.log(parseInt(str)); // 3 console.log(parseFloat(str)); // 3.14
轉(zhuǎn)換為布爾值
所有值在JavaScript中都可以轉(zhuǎn)換為布爾值
。JavaScript中有一些被認(rèn)為是假值
的值,它們轉(zhuǎn)換為布爾值時(shí)會(huì)得到false
,包括:0、-0、null、undefined、NaN和空字符串("")
。其他所有值都被認(rèn)為是真值
,轉(zhuǎn)換為布爾值時(shí)會(huì)得到true。
console.log(Boolean(0)); // false console.log(Boolean("")); // false console.log(Boolean(null)); // false console.log(Boolean(undefined));// false console.log(Boolean(NaN)); // false console.log(Boolean(123)); // true console.log(Boolean("hello")); // true console.log(Boolean({})); // true
二、常見(jiàn)的強(qiáng)制類(lèi)型轉(zhuǎn)換場(chǎng)景
相等運(yùn)算符 ==
與嚴(yán)格相等運(yùn)算符 ===
在使用相等運(yùn)算符==
時(shí),JavaScript會(huì)進(jìn)行強(qiáng)制類(lèi)型轉(zhuǎn)換以比較不同類(lèi)型的值
。相反,嚴(yán)格相等運(yùn)算符===
不會(huì)進(jìn)行類(lèi)型轉(zhuǎn)換,只在兩個(gè)值類(lèi)型相同且值相等時(shí)返回true
。
console.log(123 == "123"); // true,字符串"123"被轉(zhuǎn)換為數(shù)字123 console.log(123 === "123"); // false,類(lèi)型不同
算術(shù)運(yùn)算符
當(dāng)不同類(lèi)型的值參與算術(shù)運(yùn)算時(shí),JavaScript會(huì)嘗試將它們轉(zhuǎn)換為數(shù)字
let result = "4" - 3; // "4" 被轉(zhuǎn)換為 4,結(jié)果為 1 console.log(result); // 1 result = "5" + 5; // 由于 + 運(yùn)算符優(yōu)先進(jìn)行字符串連接,結(jié)果為 "55" console.log(result); // "55"
邏輯運(yùn)算符
邏輯運(yùn)算符(&&、||、!)也會(huì)觸發(fā)類(lèi)型轉(zhuǎn)換。它們通常會(huì)將操作數(shù)轉(zhuǎn)換為布爾值,以決定運(yùn)算結(jié)果
console.log(!!"hello"); // true,非空字符串被轉(zhuǎn)換為 true console.log(!!0); // false,0 被轉(zhuǎn)換為 false console.log(null || "default"); // "default",null 被轉(zhuǎn)換為 false
三、避免強(qiáng)制類(lèi)型轉(zhuǎn)換的陷阱
NaN陷阱
當(dāng)嘗試將非數(shù)值字符串轉(zhuǎn)換為數(shù)字時(shí),會(huì)得到NaN(Not-a-Number)
let result = Number("hello"); console.log(result); // NaN
null和undefined的特殊情況
null和undefined在進(jìn)行類(lèi)型轉(zhuǎn)換時(shí)有一些特殊的行為,需要特別注意。
console.log(Number(null)); // 0 console.log(Number(undefined)); // NaN
字符串連接與算術(shù)運(yùn)算
由于+運(yùn)算符既用于字符串連接又用于加法運(yùn)算,容易引起混淆。
console.log("5" + 3); // "53",字符串連接 console.log("5" - 3); // 2,算術(shù)運(yùn)算
到此這篇關(guān)于深入理解JavaScript強(qiáng)制類(lèi)型轉(zhuǎn)換的文章就介紹到這了,更多相關(guān)JavaScript強(qiáng)制類(lèi)型轉(zhuǎn)換內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- 詳解JavaScript中的強(qiáng)制類(lèi)型轉(zhuǎn)換和自動(dòng)類(lèi)型轉(zhuǎn)換
- JS中強(qiáng)制類(lèi)型轉(zhuǎn)換的實(shí)現(xiàn)
- 重學(xué)JS之顯示強(qiáng)制類(lèi)型轉(zhuǎn)換詳解
- JavaScript強(qiáng)制類(lèi)型轉(zhuǎn)換和隱式類(lèi)型轉(zhuǎn)換操作示例
- 詳解JavaScript中的強(qiáng)制類(lèi)型轉(zhuǎn)換
- JS在if中的強(qiáng)制類(lèi)型轉(zhuǎn)換方式
- Javascript Boolean、Nnumber、String 強(qiáng)制類(lèi)型轉(zhuǎn)換的區(qū)別詳細(xì)介紹
- Javascript 強(qiáng)制類(lèi)型轉(zhuǎn)換函數(shù)
相關(guān)文章
js 執(zhí)行上下文和作用域的相關(guān)總結(jié)
這篇文章主要介紹了js 執(zhí)行上下文和作用域的相關(guān)知識(shí)總結(jié),幫助大家更好的理解和使用JavaScript,感興趣的朋友可以了解下2021-02-02JS實(shí)現(xiàn)隨機(jī)生成10個(gè)手機(jī)號(hào)的方法示例
這篇文章主要介紹了JS實(shí)現(xiàn)隨機(jī)生成10個(gè)手機(jī)號(hào)的方法,涉及javascript數(shù)值運(yùn)算與隨機(jī)數(shù)操作相關(guān)使用技巧,需要的朋友可以參考下2018-12-12QQ強(qiáng)制聊天功能代碼(加強(qiáng)版,兼容QQ2010)
QQ強(qiáng)制聊天功能代碼,腳本之家以前也發(fā)布過(guò),但已經(jīng)不能用了,這個(gè)是新版本,經(jīng)過(guò)測(cè)試,完全兼容新版本的qq.2010-06-06JavaScript?中的數(shù)據(jù)類(lèi)型Number
這篇文章主要介紹了JavaScript?中的數(shù)據(jù)類(lèi)型Number,Number?類(lèi)型使用?IEEE?754?格式表示整數(shù)和浮點(diǎn)值,下文相關(guān)詳細(xì)資料介紹,需要的小伙伴可以參考一下2022-04-04Electron 結(jié)合 Selenium + chromedriver 
這篇文章主要介紹了Electron 結(jié)合 Selenium + chromedriver 驅(qū)動(dòng)服務(wù)實(shí)現(xiàn)瀏覽器多開(kāi)思路詳解,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧2024-07-07Echarts實(shí)現(xiàn)單條折線(xiàn)可拖拽效果
這篇文章主要為大家詳細(xì)介紹了Echarts實(shí)現(xiàn)單條折線(xiàn)可拖拽,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-12-12Javascript 中 null、NaN和undefined的區(qū)別總結(jié)
js中的數(shù)據(jù)類(lèi)型有undefined,boolean,number,string,object等5種,前4種為原始類(lèi)型,第5種為引用類(lèi)型,接下來(lái)與大家分享下它們之間的區(qū)別2013-04-04Javascript筆記一 js以及json基礎(chǔ)使用說(shuō)明
JavaScript中的數(shù)據(jù)很簡(jiǎn)潔的。簡(jiǎn)單數(shù)據(jù)只有 undefined, null, boolean, number和string這五種,而復(fù)雜數(shù)據(jù)只有一種,即object。2010-05-05學(xué)習(xí)javascript面向?qū)ο?實(shí)例講解面向?qū)ο筮x項(xiàng)卡
這篇文章主要介紹了面向?qū)ο筮x項(xiàng)卡實(shí)現(xiàn)方法,幫助大家更好地學(xué)習(xí)javascript面向?qū)ο?,感興趣的小伙伴們可以參考一下2016-01-01JavaScript折半查找(二分查找)算法原理與實(shí)現(xiàn)方法示例
這篇文章主要介紹了JavaScript折半查找(二分查找)算法原理與實(shí)現(xiàn)方法,結(jié)合具體問(wèn)題描述了折半查找算法的原理、實(shí)現(xiàn)方法及相關(guān)操作注意事項(xiàng),需要的朋友可以參考下2018-08-08