国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

Javascript 隱式轉(zhuǎn)換

AnthonyHan / 885人閱讀

摘要:在比較字符串數(shù)值和布爾值的相等性時,問題還比較簡單。后來,有人提出了這種轉(zhuǎn)換到底是否合理的質(zhì)疑。相等時的隱式轉(zhuǎn)換對于操作符,通常都會先隱式轉(zhuǎn)換強制轉(zhuǎn)換,然后再比較它們的相等性。要比較相等性之前,不能將和轉(zhuǎn)換成其他任何值。

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

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

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

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

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

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

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

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

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

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

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


      // 我們還可以通過下面的方式,從側(cè)面在次驗證 JS底層默認的轉(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í)行這個過程,結果如下
    ({}).valueOf() // {}
    ({}).toString() // "[object Object]"

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

null 和 undefined 是相等的。

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

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

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

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

文章版權歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/100911.html

相關文章

  • 聊一聊 JS 中的『隱式類型轉(zhuǎn)換

    摘要:具體的行為取決于參數(shù)的類型。說到,就不得不提一下方法,方法自帶隱式類型轉(zhuǎn)換,該方法在測試其參數(shù)之前,會先調(diào)用方法將其轉(zhuǎn)換為數(shù)字。全等運算符會先進行數(shù)據(jù)類型判斷,并且不會發(fā)生隱式類型轉(zhuǎn)換。 類型轉(zhuǎn)換還不行?還非得隱式?這是什么高級玩意? 廢話不多說,我們先上一盤?,額,不對,先看一個例子吧。 3 + true 實際上在大多數(shù)編程語言中,都會認為上面這個表達式是錯誤的。因為布爾表達式與算術...

    Jenny_Tong 評論0 收藏0
  • JavaScript 強制類型轉(zhuǎn)換

    摘要:強制類型轉(zhuǎn)換作為程序員,你一定獲取過當前系統(tǒng)的時間戳。比如對于變量而言,此次強制類型轉(zhuǎn)換是隱式的。然而則是非常典型的顯式強制類型轉(zhuǎn)換。隱式強制類型轉(zhuǎn)換大部分被詬病的強制類型轉(zhuǎn)換都是隱式強制類型轉(zhuǎn)換。 JavaScript 強制類型轉(zhuǎn)換 作為 JavaScript 程序員,你一定獲取過當前系統(tǒng)的時間戳。在 ES5 引入 Date.now() 靜態(tài)方法之前,下面這段代碼你一定不會陌生: v...

    OnlyLing 評論0 收藏0
  • JavaScript 中的隱式類型轉(zhuǎn)換

    摘要:雖然你可能很驚訝甚至可能懷疑是的但是這都是有語言自己的一個隱式類型轉(zhuǎn)換的套路。基本的隱式類型轉(zhuǎn)換基本類型的隱式轉(zhuǎn)換這個其實我們使用的最多例如結果返回的是而不是這就是類型的隱式轉(zhuǎn)換。 基本上所有的語言都有 隱式類型轉(zhuǎn)換 ,但是對于 弱類型語言(JS) 來說 ,隱式類型轉(zhuǎn)換會比 強類型語言(Java) 帶來更大的副作用,有些行為甚至是不可思議的。雖然你可能很驚訝 ,甚至可能懷疑是 JS 的...

    txgcwm 評論0 收藏0
  • JavaScript隱式類型轉(zhuǎn)換

    摘要:所謂裝箱轉(zhuǎn)換,正是把基本類型轉(zhuǎn)換為對應的對象,他是類型轉(zhuǎn)換中一種相當重要的種類。拆箱轉(zhuǎn)換在標準中,規(guī)定了函數(shù),它是對象類型到基本類型的轉(zhuǎn)換即,拆箱轉(zhuǎn)換。拆箱轉(zhuǎn)換會嘗試調(diào)用和來獲得拆箱后的基本類型。 JavaScript隱式類型轉(zhuǎn)換 基本數(shù)據(jù)類型 ECMAScript 一共定義了七種 build-in types,其中六種為 Primitive Value,Null, Undefined...

    bingo 評論0 收藏0
  • JavaScript數(shù)據(jù)類型及(隱式)類型轉(zhuǎn)換詳解

    摘要:顯示的調(diào)用轉(zhuǎn)換過程稱為顯式強制類型轉(zhuǎn)換,隱式的情況稱為隱式強制類型轉(zhuǎn)換。隱式強制類型轉(zhuǎn)換讓代碼變得晦澀難懂而又便捷而奇妙。事實上,允許在比較中進行強制類型轉(zhuǎn)換,而不允許。如果有并且返回基本類型值,就使用該值進行強制類型轉(zhuǎn)換。 JavaScript是一種非常靈活的現(xiàn)代編程語言,靈活到使用者極其容易被忽視的它那廣闊的世界以及它帶給我們的無限遐想空間。本文將對JavaScript最最基礎也最...

    hiyayiji 評論0 收藏0
  • 掌握 Javascript 類型轉(zhuǎn)換隱式轉(zhuǎn)換救救孩子

    摘要:看下面的代碼和會對操作數(shù)執(zhí)行條件判斷,如果操作數(shù)不是布爾值,會先執(zhí)行類型轉(zhuǎn)換后再執(zhí)行條件判斷。大家記住這個規(guī)則布爾值如果與其他類型進行抽象比較,會先用將布爾值轉(zhuǎn)換為數(shù)字再比較。 在上一篇中我們聊過了 JS 類型轉(zhuǎn)換的規(guī)則和我發(fā)現(xiàn)的一些常見書籍中關于類型轉(zhuǎn)換的一些小錯誤,當碰到顯示類型轉(zhuǎn)換的時候大家可以按照這些規(guī)則去拆解出答案。但 JS 中存在一些很隱晦的隱式類型轉(zhuǎn)換,這一篇就來談下我對...

    weapon 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<