真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

Javascript隱式轉(zhuǎn)換的使用方法

這篇文章主要介紹Javascript隱式轉(zhuǎn)換的使用方法,文中介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們一定要看完!

目前創(chuàng)新互聯(lián)建站已為近1000家的企業(yè)提供了網(wǎng)站建設(shè)、域名、網(wǎng)絡(luò)空間、網(wǎng)站托管、企業(yè)網(wǎng)站設(shè)計、池州網(wǎng)站維護(hù)等服務(wù),公司將堅持客戶導(dǎo)向、應(yīng)用為本的策略,正道將秉承"和諧、參與、激情"的文化,與客戶和合作伙伴齊心協(xié)力一起成長,共同發(fā)展。

確定兩個變量是否相等是編程中的一個非常重要的操作。
在比較字符串、數(shù)值和布爾值的相等性時,問題還比較簡單。但在涉及到對象的比較時,問題就變得復(fù)雜了。最早的 ECMAScript 中的相等和不等 操作符會在執(zhí)行比較之前,先將對象轉(zhuǎn)換成相似的類型。后來,有人提出了這種轉(zhuǎn)換到底是否合理的質(zhì)疑。
最后,ECMAScript 的解決方案就是提供兩組操作符:
   相等和不相等——先轉(zhuǎn)換再比較,全等和不全等——僅比較而不轉(zhuǎn)換。
此處我們只對相等做一些討論。

"==" 相等 時的隱式轉(zhuǎn)換

對于 "==" 操作符,通常都會先隱式轉(zhuǎn)換(強制轉(zhuǎn)換),然后再比較它們的相等性。

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

1.如果有一個操作數(shù)是布爾值,則在比較相等性之前先將其轉(zhuǎn)換為數(shù)值——false 轉(zhuǎn)換為 0,而true轉(zhuǎn)換為 1;

2.如果一個操作數(shù)是字符串,另一個操作數(shù)是數(shù)值,在比較相等性之前先將字符串轉(zhuǎn)換為數(shù)值;
  字符串轉(zhuǎn)換為數(shù)值:

(1)數(shù)字類型的字符串,會被轉(zhuǎn)成對應(yīng)十進(jìn)制的數(shù)值;
  (2)空字符串會轉(zhuǎn)換成0;
  (3)其余的全都會轉(zhuǎn)換為NaN;(NaN 與任何值都不相等,包括自身)

3.如果一個操作數(shù)是對象,另一個操作數(shù)不是,則調(diào)用對象的 valueOf()方法,用得到的基本類型值按照前面的規(guī)則進(jìn)行比較;

下面可以通過一個簡單的例子來看一下 JS 底層的轉(zhuǎn)換規(guī)則。

    // 根據(jù)隱式轉(zhuǎn)換規(guī)則第三條 調(diào)用對象的 valueOf 方法
    [].valueOf() // []

    // 這時就變成 [] == false ,又回到原來的情況,這時JS底層又是怎么處理的呢?
    // 其實 JS 的底層在調(diào)用 valueOf 得到的返回結(jié)果如果不是原始值時,就會調(diào)用對象的 toString 方法將對象轉(zhuǎn)換成字符串。對于這個過程我們可以通過一下的例子來驗證。

    [].valueOf() // []
    [].toString() // ''
    //上面是 這兩個方法的 默認(rèn)行為,在下面的例子中我們不改變默認(rèn)行為
    [].__proto__.valueOf = () => { console.log('valueOf'); return []; }
    [].__proto__.toString = () => { console.log('toString'); return ''; }
    [] == false
    // 運行的結(jié)果為 valueOf toString true
    // 這樣就驗證了上述的說明


      // 我們還可以通過下面的方式,從側(cè)面在次驗證 JS底層默認(rèn)的轉(zhuǎn)換行為

    [].__proto__.valueOf = () => { console.log('valueOf'); return ''; }
    [].__proto__.toString = () => { console.log('toString'); return ''; }
    [] == false
    // valueOf true

    [].__proto__.valueOf = () => { console.log('valueOf'); return []; }
    [].__proto__.toString = () => { console.log('toString'); return []; }
    [] == false
    // JS 報錯 Uncaught TypeError: Cannot convert object to primitive value

現(xiàn)在我們可以來看看例子中 空對象為什么不等于 false?從正常的角度來講,數(shù)組就是一個對象,為什么空數(shù)組等于 false,而空對象為什么和 false 不相等?

    //現(xiàn)在我們可以參照上面隱式轉(zhuǎn)換的過程,對空對象手動的執(zhí)行這個過程,結(jié)果如下
    ({}).valueOf() // {}
    ({}).toString() // '[object Object]'

    // 這時我們發(fā)現(xiàn) 空對象 與 空數(shù)組默認(rèn)行為的區(qū)別了,在 toString 方法上,由于數(shù)組會對繼承自對象的 toString 方法進(jìn)行重寫,將數(shù)組中的每個元素通過 ',' 鏈接成一個字符串
    // 這時就變成了 '[object Object]' == false 
    // 根據(jù)規(guī)則第二條,得到最后結(jié)果 false

隱式轉(zhuǎn)換的特殊規(guī)則:

  1. null 和 undefined 是相等的。

  2. 要比較相等性之前,不能將 null 和 undefined 轉(zhuǎn)換成其他任何值。

  3. 如果有一個操作數(shù)是 NaN,則相等操作符返回 false,而不相等操作符返回 true。

  4. 如果兩個操作數(shù)都是對象,則比較它們是不是同一個對象。(比較引用類型的地址是否相同)

    null == undefined  // true
    NaN == NaN         // false
    NaN != NaN         // true
    false == 0         // true
    undefined == 0     // true
    null == 0          // true

以上是Javascript隱式轉(zhuǎn)換的使用方法的所有內(nèi)容,感謝各位的閱讀!希望分享的內(nèi)容對大家有幫助,更多相關(guān)知識,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道!


分享名稱:Javascript隱式轉(zhuǎn)換的使用方法
標(biāo)題網(wǎng)址:http://weahome.cn/article/gssipj.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部