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