成人在线亚洲_国产日韩视频一区二区三区_久久久国产精品_99国内精品久久久久久久

您的位置:首頁技術文章
文章詳情頁

JavaScrip簡單數據類型隱式轉換的實現

瀏覽:585日期:2022-06-09 14:53:15
目錄
  • JavaScrip隱式轉換規則
  • JavaScrip類型轉換詳解
    • 轉換成Number類型
    • 轉換為String類型
    • 轉換為Boolean類型
  • JavaScrip特殊操作符對類型轉換的影響
    • !邏輯非運算符
    • == 相等運算符
    • 比較運算符
    • + 算數運算符
  • 總結

    JavaScript是一種弱數據類型語言 ,在JavaScript中定義變量不需要提前指定變量類型,變量的數據類型是在程序運行過程中由JavaScript引擎動態決定,因而可以使用同一個變量來存儲不同類型的數據(var、let、const),這也意味著它會自動轉換值的數據類型,以便數據之間更加容易相互比較和操作。除去我們比較熟知的顯式轉換,JavaScript中的隱式轉換更加需要理解和一定的經驗。下面將為大家詳細的列舉一下JS隱式轉換的各種情況。

    在JavaScript中,數據類型的隱式轉換主要有三種情況:

    • 轉換為number類型
    • 轉換為boolean類型
    • 轉換為string類型

    JavaScript隱式類型轉換通常發生在以下情況:

    • 當使用不同類型的值進行操作時(數字和字符串)
    • 當使用相等或不等運算符(== 或 !=)進行比較時
    • 當對一個非布爾類型的值進行布爾運算時(if語句或邏輯運算符)

    JavaScrip隱式轉換規則

    JavaScript中隱式類型轉換的機制是比較復雜的,涉及到了數據類型、操作符、運算順序等多方面的因素。

    當兩個操作數具有不同的類型時,系統內部根據一系列規則來決定將其轉換為相同的類型,這些規則包括:

    • 如果一個操作數是數字,則將另一個操作數轉換為數字
    • 如果一個操作數是字符串,則將另一個操作數轉換為字符串
    • 如果一個操作數是布爾值,則將另一個操作數轉換為布爾值
    • 如果一個操作數是對象,則嘗試將另一個操作數轉換為對象,否則將其轉換為原始類型

    另外:

    • + 號兩邊只要有一個是字符串,都會把另外一個轉成字符串
    • 除了+以外的算術運算符 比如 - * / 等都會把數據轉成數字類型
    • 邏輯非 ! 轉換為布爾
    • +號作為正號解析可以轉換成數字型
    • 任何數據和字符串相加結果都是字符串

    JavaScrip類型轉換詳解

    轉換成Number類型

    轉為Number類型:++ / --(自增自減運算符) + - * / %(算術運算符) > < >= <= == != === !== (關系運算符)。null轉換為數字為0undefinedNaN

    簡單數據轉換數字對照:

    原始數據類型轉換之后的值空字符 ''或""0非空字符串將字符內的數據內容變為數據,如果還有其他符號中文等轉為NaNtrue1false0null0undefinedNaNNaN(不用轉,typeof NaN 得到"number")

    示例:

    // 隱式轉換為數字型的運算符// 算術運算符 - *  /   比較運算符  >   ==console.log(8 - "3") // 5console.log("1999" * "2") // 3998,此處兩個string型全都得轉換為number型console.log("35" - 34)  //1 console.log("35" - "34") //1console.log("40" / "2") //20console.log("35" % 2)  //1console.log("35" % "2") //1console.log(5 - undefined) //NaN 因為Undefined轉為數字為NaNconsole.log(5 - null) //5console.log(44%("2a")) //NaN,其中,2a進行強轉后為NaN,NaN參與運算返回NaNconsole.log("5">"3") //true 此處直接比較的ASCII碼。console.log(3 > "1")   // trueconsole.log(3 == "3")  // trueconsole.log(3 == "+3")  // true,此處的+號相當于是類型轉換console.log(3 == "-3")  // falseconsole.log(3 == "*3")  // falseconsole.log(3 == "/3")  // falseconsole.log(3 == "a3")  // falseconsole.log("a" == 97)  // falseconsole.log("a" > "A")  // true 此處比較的是ASCII碼,其中a為97 A為65,因此為trueconsole.log("a" > "")  // trueconsole.log("" == 0) //true// + 正號使用的時候,也會把字符串轉換為 數字型console.log("123")  // "123"console.log(+"123")  // 123console.log(typeof +"123") // numberconsole.log(+"0x12" == 18) // trueconsole.log("55" + true) //"55true"http:// undefined、null、boolean類型轉換為數字console.log(NaN == NaN) //false,NaN比較特殊,它自己不等于自己console.log(undefined == 0) //falseconsole.log(undefined == NaN) //falseconsole.log(undefined == null) //true,此處undefined和null值都為空,因此能夠相等console.log(null == 0) //false  此處沒有進行類型轉換,因為null是一個值類型,它的數值就是null,我們在使用==時,會直接把null這個數值與0進行比較,結果為falseconsole.log(null === 0) // falseconsole.log(null >= 0) //false  null要進行數值比較,此處便會嘗試轉為number,則為0,結果為 trueconsole.log(false == null) //false 特殊情況,理論上都應該轉換為0比較然后相等true,但實際是直接拿值比較,不會先轉為為數字console.log(true == 1) //trueconsole.log(false == 1) //falseconsole.log(true > false) //true 先轉化為1和0數字進行比較console.log(true + 1) // 2console.log(true + null) //1,其中true轉換為1,null轉換為0console.log(undefined + 1) // NaNconsole.log("5" - true) //4console.log("5" - false) //0//數組轉換為數字console.log([9] == 9) //trueconsole.log([9,"a"] == 9) //false//特殊情況console.log({} == {}) // false,對象類型比的是地址,不同對象地址不同console.log([]==[])   // false,理由同上

    轉換為String類型

    簡單數據轉換字符串對照:

    原始數據類型轉換之后的值數字類型數字類型的字符表示null‘null’undefined‘undefined’布爾類型true變’true’,false變’false’

    此處注意點為-0轉換為string類型為'0'

    ["a","b"]轉換string類型為"a,b"

    []轉換為string類型為""

    轉換為Boolean類型

    數據邏輯判斷邏輯運算之中會隱式轉換為boolean類型

    轉換為布爾型:空字符、0、-0、undefined、null、false、NaN轉換為布爾值后為false,其余為true

    + 號兩邊只要有一個是字符串,都會把另外一個轉成字符串

    連續使用兩個非操作符(!!)可以將一個數強制轉換為boolean類型,這在開發之中比較實用。

    簡單數據轉換布爾型對照:

    數據類型轉換為true的值轉換為false的值String任何非空字符串空字符串(""或’')Number任何非零數字0和NaNObject任何對象nullUndefined不適用undefined

    示例:

    //隱式轉換為布爾型的運算符  !邏輯非console.log(!true)  // false console.log(!0)  // trueconsole.log(!"")  // trueconsole.log(!null) // trueconsole.log(!undefined)  // trueconsole.log(!NaN)  // trueconsole.log(!false)  // trueconsole.log(!"hello") // false

    JavaScrip特殊操作符對類型轉換的影響

    !邏輯非運算符

    !會將后面的數據先轉成布爾值,然后取反

    var a; //a = undefinedvar r = !!a; console.log(r) //false!!{} // true!!undefined // false!!null // false!!NaN //fales

    == 相等運算符

    比較操作符會為兩個不同類型的操作數轉換類型,然后進行嚴格比較。當兩個操作數都是對象時,JavaScript會比較其內部引用,當且僅當他們的引用指向內存中的相同對象時才相等,即他們在棧內存中的引用地址相同。

    1.類型相同

    如果比較的是兩個對象,則比較兩個對象的指針是否指向同一個對象

    let a = {}let b = {}a==b //falselet a = {}let b = a;a==b //true

    2.類型不同

    如果兩邊類型不同,則兩邊都嘗試轉成number類型。對于引用類型,先調用valueOf(),如果能轉成數字,則進行比較。不能轉成數字就調用toString()方法轉成字符串。

    tips:因為null是一個值類型,它的數值就是null,我們在使用==時,會直接把null這個數值與數值進行比較,而不是轉換為0

    console.log(3 == "3")  // trueconsole.log(3 == "+3")  // true,此處的+號相當于是類型轉換console.log(3 == "-3")  // falseconsole.log(3 == "a3")  // falseconsole.log(+"0x12" == 18) // trueconsole.log("" == 0) //trueconsole.log(null == 0) //false  此處沒有進行類型轉換,因為null是一個值類型,它的數值就是null,我們在使用==時,會直接把null這個數值與0進行比較,結果為falseconsole.log(NaN == NaN) //false,NaN比較特殊,它自己不等于自己console.log(undefined == 0) //falseconsole.log(undefined == NaN) //falseconsole.log(undefined == null) //true,此處undefined和null值都為空,因此能夠相等

    面試題

    //問題1:console.log(new String("abc") == true)//flase//step1:右側轉成數字1,變成:new String("abc")==1//step2 new String("abc").valueOf()不是數字也不是字符串,再調用toString()"abc" == 1//step3:字符串轉數字NaN == 1 //false,NaN和任何類型比較都為false//問題2:console.log({}==true)//false//step1:右側轉成數字{} == 1//step2 {}.valueOf()不是數字也不是字符串,再調用toString()"[object Object]" ==1  //step3:字符串轉數字NaN == 1 //false,NaN和任何類型比較都為false//問題3:console.log([]==![])//true//step1:!優先級比==高,先轉右邊,[]是對象類型,轉成布爾值為true,!true就是false[]==false//step2:右側轉成數字為0[]==0//step3:左側是一個對象,valueOf()轉出來不是字符也不是字符串,調用toString(),得到空字符串"" == 0//step4:字符串轉成數字0 == 0 //true

    比較運算符

    字符串類型比較大小時,不進行類型轉換,而是逐位比較ASCII碼,第一位不同則返回結果,否則繼續比較第二位,直到某一位不同為止。

    字符串與數字或者boolean與數字比較時,會進行隱式數據類型轉換

    示例

    console.log("5555555" < "6") //true,首先比較第一個字符串的第一個字符,如果不同直接返回結果console.log("5">"3") //true,此處直接比較的ASCII碼。console.log(3 > "1") // trueconsole.log("a" > "A")  // true,此處比較的是ASCII碼,其中a為97 A為65,因此為trueconsole.log("a" > "")  // trueconsole.log(null >= 0) //false,null要進行數值比較,此處便會嘗試轉為number,則為0,結果為 true

    + 算數運算符

    +號作為一元操作符時,它就會將這個數轉換為數字類型

    +號作為二元操作符時

    console.log(3 == "+3")  // true,此處的+號相當于是類型轉換console.log("55" + true) //"55true"console.log(true + 1) // 2console.log(true + null) //1,其中true轉換為1,null轉換為0console.log(undefined + 1) // NaN

    + 號兩邊只要有一個是字符串,都會把另外一個轉成字符串,此時+號為連接符

    總結

    到此這篇關于JavaScrip簡單數據類型隱式轉換的實現的文章就介紹到這了,更多相關JavaScrip 數據類型隱式轉換內容請搜索以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持!

    標簽: JavaScript
    成人在线亚洲_国产日韩视频一区二区三区_久久久国产精品_99国内精品久久久久久久
    欧美一区免费视频| 国产伦精品一区二区三区免费| 午夜精品久久久| 狠狠综合久久av一区二区老牛| 日韩欧美国产系列| 国产综合色在线| 欧美性猛交xxxx乱大交退制版| 亚洲在线中文字幕| 99精品国产一区二区青青牛奶| 国产精品三级av在线播放| 99精品久久99久久久久| 在线播放91灌醉迷j高跟美女 | 亚洲黄色一区二区三区| 国产精品久久国产精麻豆99网站| 午夜欧美精品久久久久久久| 欧美国产激情一区二区三区蜜月| 欧美在线视频一区二区三区| 久久午夜羞羞影院免费观看| 94-欧美-setu| 久久久国产午夜精品| 岛国精品在线观看| 精品国产免费视频| 99久久99久久精品国产片果冻| 精品国产一二三区| jlzzjlzz亚洲日本少妇| 久久夜色精品国产欧美乱极品| 不卡区在线中文字幕| 久久婷婷久久一区二区三区| 99精品国产视频| 中文字幕欧美激情| 在线观看成人av| 一区二区三区在线免费| 欧美专区18| 青娱乐精品视频| 欧美色视频一区| 国产精品白丝jk黑袜喷水| 3d动漫精品啪啪1区2区免费 | 一本色道久久99精品综合| 一区二区三区中文在线| 免费看亚洲片| 另类小说一区二区三区| 欧美日韩黄视频| 成人精品鲁一区一区二区| 久久精品视频在线免费观看| 国产一区视频在线观看免费| 亚洲日本电影在线| 免费久久99精品国产自在现线| 久久精品噜噜噜成人av农村| 欧美一级理论性理论a| 99v久久综合狠狠综合久久| 久久久久国产精品麻豆ai换脸| 国产精品jizz在线观看美国| 亚洲人被黑人高潮完整版| 久久av在线| 国产精品亚洲第一| 久久日一线二线三线suv| 黄色精品网站| 亚洲午夜一区二区| 欧美日韩一级二级| av高清久久久| 1区2区3区欧美| 久久婷婷麻豆| av男人天堂一区| 夜夜亚洲天天久久| 欧美日韩国产天堂| 91免费版在线| 亚洲在线中文字幕| 6080yy午夜一二三区久久| 国内精品久久久久久久影视麻豆| 亚洲成人一区在线| 91精品国产91久久久久久一区二区 | 欧美三区在线视频| 91一区二区在线观看| 亚洲男同1069视频| 欧美日韩一区二区欧美激情| 欧美日韩久久| 蜜臀av一区二区在线免费观看| 亚洲精品一线二线三线| 亚洲美女啪啪| 国产在线播放一区三区四| 国产网红主播福利一区二区| 麻豆成人在线| 99久免费精品视频在线观看| 亚洲午夜羞羞片| 久久综合色天天久久综合图片| 国产欧美一区二区三区另类精品| 国产一区二区在线影院| 中文字幕一区二区三区四区不卡| 在线视频观看一区| 欧美日韩一区二区三区在线观看免 | 国产成人自拍网| 亚洲视频精选在线| 欧美私模裸体表演在线观看| 欧美xx69| 老司机一区二区| 国产精品午夜在线| 欧美三级日韩三级| 一区久久精品| 国产精品一区在线观看你懂的| 综合久久久久久| 4438x亚洲最大成人网| 99视频精品| 懂色中文一区二区在线播放| 亚洲一区二区偷拍精品| 精品国产亚洲在线| 色偷偷成人一区二区三区91| 欧美va天堂在线| 激情文学综合插| 亚洲欧美电影院| 日韩女优av电影在线观看| 亚洲一区在线免费| 欧美福利影院| 精品在线一区二区| 亚洲精品免费在线观看| 欧美成人video| 色视频欧美一区二区三区| 黄色国产精品一区二区三区| 国产成人免费在线视频| 亚洲一级二级三级| 日本一区二区三区视频视频| 欧美日韩国产高清一区二区| 一道本一区二区| 色综合天天综合网国产成人综合天 | 欧美综合77777色婷婷| 欧美成人69av| 国产福利91精品| 亚洲综合成人在线| 欧美激情一区二区三区四区| 91精品国产综合久久福利软件 | 欧美系列在线观看| 一本久道久久久| 欧美一区二区在线| 国产一区二区三区观看| 亚洲福利视频一区| 中文字幕一区二区三区在线不卡 | 日韩av在线发布| 亚洲男人的天堂一区二区| 久久嫩草精品久久久久| 欧美精品99久久久**| 在线影院国内精品| 国产精品视区| 永久久久久久| 91亚洲精品乱码久久久久久蜜桃| 国产综合色视频| 久久精品国产99国产精品| 午夜精品福利一区二区三区蜜桃| 亚洲蜜臀av乱码久久精品蜜桃| 久久久久久久久久久久久女国产乱| 欧美久久久一区| 色老汉av一区二区三区| 国产精品一级| 亚洲二区三区四区| 国产主播一区| 欧美日韩一区自拍| 你懂的亚洲视频| 99精品热视频| 99riav久久精品riav| 国产99精品国产| 国产在线精品免费av| 另类中文字幕网| 免费久久精品视频| 丝袜美腿高跟呻吟高潮一区| 亚洲福利电影网| 午夜精品久久久久久久| 午夜精品久久久久久久| 亚洲第一激情av| 亚洲一区二区三区视频在线播放| 亚洲欧美激情在线| 亚洲柠檬福利资源导航| 日韩理论片在线| 中文字幕日本乱码精品影院| 国产精品人成在线观看免费| 欧美激情自拍偷拍| 国产精品国产自产拍在线| 国产色婷婷亚洲99精品小说| 久久香蕉国产线看观看99| 久久久精品国产99久久精品芒果| 久久精子c满五个校花| 国产女同性恋一区二区| 中文子幕无线码一区tr| 国产精品久久免费看| 国产精品美女久久久久高潮| 国产精品久久久一本精品| 亚洲欧洲成人精品av97| 亚洲欧美日韩国产成人精品影院 | 久久久久久久综合色一本| 国产午夜精品久久久久久免费视| 国产午夜精品一区二区三区嫩草| 欧美国产综合一区二区| 亚洲国产精品精华液2区45| 国产精品色噜噜| 一区二区三区视频在线看| 亚洲成年人网站在线观看| 日韩国产精品久久| 日本三级韩国三级欧美三级| 亚洲午夜激情av| 午夜精品视频一区| 全部av―极品视觉盛宴亚洲| 免费美女久久99| 国产精品资源网|