日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

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

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

瀏覽:655日期: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
    日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
    国产精品白浆| 999久久久精品国产| 国产日韩综合| 樱桃成人精品视频在线播放| 一本色道精品久久一区二区三区| 国产高清一区二区| 久久国产精品久久w女人spa| 亚洲精选91| 国产欧美日韩精品一区二区免费| 国产精品伊人| 国产一区二区三区视频在线| 91亚洲无吗| 国产精品入口久久| 国产一区三区在线播放| 日本一区二区高清不卡| 99视频精品视频高清免费| 激情综合自拍| 一区二区不卡| 国产伦精品一区二区三区在线播放| 国产精品一级| 亚洲黄色网址| 亚洲男女av一区二区| 美美哒免费高清在线观看视频一区二区| 中文字幕日韩欧美精品高清在线| 国产精品毛片视频| 欧美日韩国产观看视频| 香蕉成人av| 噜噜噜久久亚洲精品国产品小说| 欧美日本一区| 日韩一区电影| 一区二区亚洲视频| 久久精品伊人| 亚洲一级二级| 日韩福利视频一区| 日韩大片在线播放| 蜜桃视频一区二区三区| 欧美极品一区二区三区| 久久蜜桃av| 日本a级不卡| 日韩久久精品| 国产精品试看| 国产一卡不卡| 欧美日韩一二三四| 视频一区日韩精品| 高清av不卡| 亚洲开心激情| 国产+成+人+亚洲欧洲在线| 日韩视频久久| 国产福利一区二区精品秒拍 | 视频一区二区三区中文字幕| 久久国内精品自在自线400部| 日韩一区自拍| 日本a口亚洲| 久久一区二区三区电影| 日韩精品午夜视频| 日韩国产一区二区| 欧美日韩一区二区国产| 国产综合激情| 牛牛精品成人免费视频| 欧美日韩精品一本二本三本| 国产精品对白久久久久粗| 亚洲精品中文字幕乱码| 久久精品三级| 最新国产精品视频| 久久久天天操| 国产乱人伦精品一区| 亚洲欧洲午夜| 水蜜桃精品av一区二区| 日本一区中文字幕| 久久男人天堂| 欧美三区不卡| 另类亚洲自拍| av在线日韩| 麻豆精品在线视频| 亚洲精品在线二区| 亚洲高清影视| 成人台湾亚洲精品一区二区| 午夜亚洲福利| 黄色日韩在线| 日本久久成人网| 精品成人18| 日韩av不卡一区二区| 中文一区二区| 久久久久久久久久久9不雅视频| 国产精品一区二区三区www| 国产视频一区在线观看一区免费| 亚洲美女久久精品| 久久精品一区| 国产精品一区三区在线观看| 亚洲男人在线| 夜夜嗨av一区二区三区网站四季av| sm久久捆绑调教精品一区| 国产亚洲久久| 日本不卡高清| 免费精品视频在线| 日韩亚洲国产欧美| 欧美福利一区| 久久久精品日韩| 在线中文字幕播放| 国产剧情在线观看一区| 日韩精选在线| 日韩欧美在线精品| 中文字幕中文字幕精品| 9色精品在线| 2023国产精品久久久精品双| 99精品网站| 久久国产电影| 日韩免费小视频| 亚洲一级少妇| 精品日韩视频| 99久精品视频在线观看视频| 日韩啪啪电影网| 性欧美videohd高精| 亚洲性色av| 天堂av在线| 日本少妇一区| 99久久www免费| 亚洲午夜黄色| 一区二区自拍| 国产手机视频一区二区| 黄色av日韩| 羞羞答答国产精品www一本| 99亚洲视频| 在线免费观看亚洲| 日韩美女国产精品| 国产三级精品三级在线观看国产| 青青草伊人久久| 国产精品白浆| 国产伊人久久| 三上亚洲一区二区| 国产一区二区三区久久 | 精品国产不卡| 欧美一区二区三区久久精品| 国产欧美一区二区三区国产幕精品 | 欧美日韩在线播放视频| 欧美成人一二区| 国产一精品一av一免费爽爽| 91成人精品视频| 国产精品美女久久久| 亚洲福利国产| 亚洲欧美成人综合| 亚洲欧洲专区| 欧美激情aⅴ一区二区三区| 精品三区视频| 久久视频精品| 蜜桃传媒麻豆第一区在线观看| 亚洲欧美日韩视频二区| 日本成人在线视频网站| 欧美国产免费| 日本免费久久| 日韩午夜av| 亚洲精品自拍| 老司机精品视频网| 亚洲成人二区| 黄色在线一区| 欧美午夜三级| 欧美激情另类| 99视频精品| 久久黄色影视| 国产在线|日韩| 蜜桃久久久久久| 美女精品视频在线| 在线日韩中文| 奇米亚洲欧美| 日韩综合精品| 亚洲理论在线| 精品网站999| 91久久视频| 久久国产三级精品| 国产中文字幕一区二区三区| 91成人精品| 国产精品一区二区精品 | 国产videos久久| 伊人久久亚洲美女图片| 日韩av中文字幕一区二区三区| 精品深夜福利视频| 一区久久精品| 欧美精品二区| 国产亚洲网站| 麻豆高清免费国产一区| 影音先锋久久| 另类欧美日韩国产在线| 激情亚洲影院在线观看| 亚洲精品九九| 免费高潮视频95在线观看网站| 视频一区二区中文字幕| 久久精品国产免费| 在线亚洲一区| 福利精品在线| 免费在线欧美视频| 高清一区二区三区av| 中文字幕亚洲精品乱码| 久草免费在线视频| 日本不卡视频一二三区| 欧美日韩一二三四| 欧美aⅴ一区二区三区视频| 亚洲一区二区动漫| 国产精品一区毛片| 免费人成在线不卡| 日韩免费高清|