摘要:下面先看看涉及到的幾個函數(shù)以及他們的轉(zhuǎn)換規(guī)則,這個是需要記憶的內(nèi)容類型轉(zhuǎn)換需要使用到的函數(shù)對于布爾值用到的是對于數(shù)值,用到的是當(dāng)然還有但是對于隱式類型轉(zhuǎn)換的時候,調(diào)用的是前者。
javaScript類型轉(zhuǎn)換規(guī)則
javaScript的類型轉(zhuǎn)換其實一直是很多前端開發(fā)人員很迷的地方,一會兒這里要轉(zhuǎn)換,一會兒那里又要轉(zhuǎn)換,總之就是一個大寫的迷,因為它隱式類型轉(zhuǎn)換的地方實在是太多了。
但其實它還是有規(guī)律可尋的,只要記憶一些基本的轉(zhuǎn)換規(guī)則并掌握這些規(guī)律,就能很好的理清楚javaScript隱式類型轉(zhuǎn)換什么時候發(fā)生以及它進(jìn)行怎樣的轉(zhuǎn)換。
下面先看看涉及到的幾個函數(shù)以及他們的轉(zhuǎn)換規(guī)則,這個是需要記憶的內(nèi)容
類型轉(zhuǎn)換需要使用到的函數(shù)對于布爾值,用到的是Boolean()
對于數(shù)值,用到的是Number(),當(dāng)然還有parseInt()、parseFloat(),但是對于隱式類型轉(zhuǎn)換的時候,調(diào)用的是前者。
對于字符串,用到的是toString()、String()
Boolean()對于不同的數(shù)據(jù)類型,轉(zhuǎn)換規(guī)則不一樣
Boolean類型: true -> true, false -> false
String類型: 任何非空字符 -> true, 空字符 -> false
Number類型: 任何非零數(shù)字(包括無窮大) -> true, 0和NaN -> false
Object類型: 任何對象啊 -> true, null(特殊的對象,實質(zhì)是是Object的派生) -> false
Udefined類型: 始終為轉(zhuǎn)換為false
Number()Boolean類型: true -> 1, false -> 0
Number類型: 只是簡單的傳入和傳出
null: 返回0
Udefined類型: 返回NaN
字符串類型:
若字符串中只包含數(shù)字(包含正負(fù)號),則將其轉(zhuǎn)換為十進(jìn)制數(shù),注意011 -> 11會忽略前面的0
如果字符串中包含有效的浮點(diǎn)格式,如"1.1",則將其轉(zhuǎn)換為對應(yīng)的浮點(diǎn)數(shù)值(同樣也會忽略前導(dǎo)零)
如果字符串包含有效的十六進(jìn)制格式,例如oxf,則將其轉(zhuǎn)換為相同大小的十進(jìn)制整數(shù)
如果字符串是空的,轉(zhuǎn)換為0
如果字符串包含上述格式之外的字符,則將其轉(zhuǎn)換為NaN
對象:先調(diào)用對象的valueOf()方法,然后依照前面列舉的規(guī)則轉(zhuǎn)換返回的值,如果轉(zhuǎn)換的結(jié)果是NaN,再調(diào)用對象的toString()方法,也依照前面的規(guī)則轉(zhuǎn)換返回的字符串值
toString()、String()除了null、undefined,其他數(shù)據(jù)類型都含有toString()這個方法,直接調(diào)用即可,null、undefined可用String()來轉(zhuǎn)換
以上規(guī)則來源于javaScript高級程序設(shè)計第三版那什么時候進(jìn)行隱式類型轉(zhuǎn)換呢? 規(guī)則
只要你的數(shù)據(jù)類型和你使用的操作符所適用的數(shù)據(jù)類型不同時(除了相等操作符==、!=),就會調(diào)用前面提到的相應(yīng)的類型轉(zhuǎn)換方法來進(jìn)行轉(zhuǎn)換。
如果被轉(zhuǎn)換類型是Object,那么會先調(diào)用自身的valueOf(),根據(jù)情況決定是否繼續(xù)調(diào)用toString(),并將得到的值傳入類型轉(zhuǎn)換方法中。
如果是二元加性操作符(+),如果有一個值為字符串,那么結(jié)果始終為字符串。
如果是關(guān)系運(yùn)算符<、<=、>、>=,對于兩邊都是字符串的情況,會比較兩個字符串對應(yīng)的字符編碼,而不是將其轉(zhuǎn)換為number。
一元操作符++、--,一元加減操作符+、-,位操作符~、&、|、^、<<、>>、>>>,乘性操作符*、/、%,加性操作符加法+、減法-,關(guān)系操作符<、>、<=、>=,它們都是對Number類型的值進(jìn)行操作,如果發(fā)現(xiàn)類型不對,就會調(diào)用Number()來轉(zhuǎn)換。
布爾操作符對于操作布爾類型的操作符如!、&&、||,如果任意一邊不是布爾值,則會調(diào)用Boolean()來轉(zhuǎn)換。
相等操作符==、!=對于相等操作符,它的類型轉(zhuǎn)換就比較復(fù)雜了,我們上面的規(guī)則也不適用于它,這里還是列出來。
這個表展示的是對于不同類型的組合,是怎么轉(zhuǎn)換的,并且將最終轉(zhuǎn)換的結(jié)果使用全等===來比較。
javaScript高級程序設(shè)計上說的很分散而且也很多,沒有統(tǒng)一說明,讓人很暈,上面是我總結(jié)出來的,中間有一個小地方我沒指明,因為還沒確認(rèn),因為個人覺得這是一個錯誤,該錯誤已上報給出版社,若確認(rèn)是一個錯誤,那么我將不會在這里指出,否者我將把這個小知識點(diǎn)添加到本文結(jié)語后面部分。上面的數(shù)據(jù)類型轉(zhuǎn)換概括的很全面,也很容易理解,希望對你有幫助。
總結(jié)來自javaScript高級程序設(shè)計第三版
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/98144.html
摘要:看下面的代碼和會對操作數(shù)執(zhí)行條件判斷,如果操作數(shù)不是布爾值,會先執(zhí)行類型轉(zhuǎn)換后再執(zhí)行條件判斷。大家記住這個規(guī)則布爾值如果與其他類型進(jìn)行抽象比較,會先用將布爾值轉(zhuǎn)換為數(shù)字再比較。 在上一篇中我們聊過了 JS 類型轉(zhuǎn)換的規(guī)則和我發(fā)現(xiàn)的一些常見書籍中關(guān)于類型轉(zhuǎn)換的一些小錯誤,當(dāng)碰到顯示類型轉(zhuǎn)換的時候大家可以按照這些規(guī)則去拆解出答案。但 JS 中存在一些很隱晦的隱式類型轉(zhuǎn)換,這一篇就來談下我對...
摘要:結(jié)合實際中的情況來看,有意或無意中涉及到隱式類型轉(zhuǎn)換的情況還是很多的。此外當(dāng)進(jìn)行某些操作時,變量可以進(jìn)行類型轉(zhuǎn)換,我們主動進(jìn)行的就是顯式類型轉(zhuǎn)換,另一種就是隱式類型轉(zhuǎn)換了。 前言 相信剛開始了解js的時候,都會遇到 2 ==2,但 1+2 == 1+2為false的情況。這時候應(yīng)該會是一臉懵逼的狀態(tài),不得不感慨js弱類型的靈活讓人發(fā)指,隱式類型轉(zhuǎn)換就是這么猝不及防。結(jié)合實際中的情況來看...
摘要:在中什么是迭代器在中,迭代器用于迭代一組元素,如列表之類的容器。中的生成器是什么實現(xiàn)迭代器的方法稱為生成器。如何將數(shù)字轉(zhuǎn)換為字符串要將數(shù)字轉(zhuǎn)換為字符串,請使用內(nèi)置函數(shù)。如果需要八進(jìn)制或十六進(jìn)制表示,請使用內(nèi)置函數(shù)或。 showImg(https://segmentfault.com/img/bVbfztO?w=1024&h=1024);16)在Python中什么是迭代器? 在Pytho...
摘要:第一步如何以最低價格快速買到阿里云服務(wù)器如果我是學(xué)生,我如何通過買到價值的服務(wù)答用購買云服務(wù)器是阿里云學(xué)生專屬活動。除阿里云外,大多數(shù)云服務(wù)器公司例如西部等同配置云服務(wù)器的價格都在左右。例如云服務(wù)器地址等。第一步:如何以最低價格快速買到阿里云服務(wù)器?1.1 如果我是學(xué)生,我如何通過¥9.9買到價值¥117的服務(wù)?答:用¥9.9購買云服務(wù)器ECS是阿里云學(xué)生專屬活動。首先,你需要在阿里云官網(wǎng)注...
摘要:首先,你需要在阿里云官網(wǎng)注冊賬號。然后在阿里云官網(wǎng)首頁點(diǎn)擊校園扶持,經(jīng)學(xué)生認(rèn)證后便可購買每月的特價云服務(wù)器。圖幕布拍照如果對備案還有疑問,請參考阿里云官方文檔首次備案圖文引導(dǎo)。具體操作方式請看阿里云官方介紹鏡像部署或一鍵安裝包部署。第一步:如何以最低價格快速買到阿里云服務(wù)器?1.1 如果我是學(xué)生,我如何通過¥9.9買到價值¥117的服務(wù)? 答:用¥9.9購買云服務(wù)器ECS是阿里云學(xué)生專屬活動...
閱讀 1610·2021-11-02 14:48
閱讀 3665·2019-08-30 15:56
閱讀 2778·2019-08-30 15:53
閱讀 3221·2019-08-30 14:09
閱讀 3115·2019-08-30 12:59
閱讀 2867·2019-08-29 18:38
閱讀 2707·2019-08-26 11:41
閱讀 2224·2019-08-23 16:45