JavaScript隱式轉(zhuǎn)換,js偷偷摸摸背著我們都做了些什么

@[toc]

一、隱式轉(zhuǎn)換規(guī)則:

隱式轉(zhuǎn)換中主要涉及到三種轉(zhuǎn)換:

1.ToPrimitive()— 將值轉(zhuǎn)換為原始值(截止到目前,原始值一共有7個, Null,Undefined,String,Number,Boolean,Symbol,BigInt)

Tip:
① 轉(zhuǎn)換結(jié)果一定是一個原始值
② 若是不傳參,對象為Date類型的,默認(rèn)為String,其余的則為Number,ToPrimitive(input, PreferredType)
Number轉(zhuǎn)換流程:如果輸入值已經(jīng)是個原始值,直接返回它 否則,調(diào)用該對象的valueof()方法,結(jié)果如果是原始值,則返回 否則,調(diào)用該對象的toString()方法,結(jié)果如果是原始值,則返回 否則,拋出TypeError異常
String轉(zhuǎn)換流程:將調(diào)用valueof()、toString()方法的順序調(diào)換一下
valueof()函數(shù)轉(zhuǎn)換結(jié)果:
Number、Boolean、String這三種構(gòu)造函數(shù)生成的基礎(chǔ)值的對象形式,通過valueOf轉(zhuǎn)換后會變成相應(yīng)的原始值
Date會將日期轉(zhuǎn)換為時間戳(數(shù)值)
此外的都返回對象本身
⑥ toString()將都轉(zhuǎn)換為字符串

2.ToNumber() — 將值轉(zhuǎn)換為數(shù)字

在這里插入圖片描述

3.ToString() — 將值轉(zhuǎn)換為字符串

在這里插入圖片描述

二、隱式轉(zhuǎn)換使用:

涉及隱式轉(zhuǎn)換最多的兩個運(yùn)算符 + 和 ==,數(shù)學(xué)運(yùn)算符(- * / %)這種的偶爾也會涉及到隱式轉(zhuǎn)換,只是轉(zhuǎn)換規(guī)則比較簡單,操作數(shù)只能是轉(zhuǎn)化為number類型。

運(yùn)算符 x + y 涉及到的隱式轉(zhuǎn)換規(guī)則:
① +屬于二元運(yùn)算符,如果x、y中有不屬于原始值的,將其轉(zhuǎn)換為原始值,保證x、y兩邊均為原始值
② 如果x、y中的任意一個為字符串,則表示它將做字符串的拼接操作,需要將另一方轉(zhuǎn)換為字符串
③ 否則,就是做相加操作,則需要保證兩邊都是數(shù)字類型
推導(dǎo):1+{}、{}+1

1+{}   //"1[object Object]"
{}+1   //1

運(yùn)算符 x == y 涉及到的隱式轉(zhuǎn)換規(guī)則:
主要分為兩類:x,y類型相同時以及x,y類型不相同時
x,y類型相同時,不涉及類型轉(zhuǎn)換,主要注意:
① NaN不與任何人相等,包括它自己,即NaN !== NaN
② 當(dāng)X和Y引用同一對象時返回true,否則返回false
x,y類型不同時,分為下面幾種情況:
① x,y 為null、undefined兩者中一個 // 返回true
② x、y為Number和String類型時,則轉(zhuǎn)換為Number類型比較。
③ 有Boolean類型時,Boolean轉(zhuǎn)化為Number類型比較。
④ 一個Object類型,一個String或Number類型,將Object類型進(jìn)行原始轉(zhuǎn)換后,按上面流程進(jìn)行原始值比較。
推導(dǎo):’0’ == true

If(‘0’){
console.log(‘I m true’)
}else{
console.log(‘I m false’)
}
//輸出:I m true

該篇文章借鑒了沈老師的技術(shù)總結(jié),如果涉及侵權(quán),請聯(lián)系我刪除

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容