<span id="mktg5"></span>

<i id="mktg5"><meter id="mktg5"></meter></i>

        <label id="mktg5"><meter id="mktg5"></meter></label>
        最新文章專題視頻專題問答1問答10問答100問答1000問答2000關鍵字專題1關鍵字專題50關鍵字專題500關鍵字專題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關鍵字專題關鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
        問答文章1 問答文章501 問答文章1001 問答文章1501 問答文章2001 問答文章2501 問答文章3001 問答文章3501 問答文章4001 問答文章4501 問答文章5001 問答文章5501 問答文章6001 問答文章6501 問答文章7001 問答文章7501 問答文章8001 問答文章8501 問答文章9001 問答文章9501
        當前位置: 首頁 - 科技 - 知識百科 - 正文

        詳細介紹JavaScript中運算符規則和隱式類型轉換

        來源:懂視網 責編:小采 時間:2020-11-27 20:13:36
        文檔

        詳細介紹JavaScript中運算符規則和隱式類型轉換

        詳細介紹JavaScript中運算符規則和隱式類型轉換:JavaScript中運算符規則的隱式類型轉換是什么 這是每個學習Javascript的新手們都應該知道的一個問題,下面這篇文章主要給大家介紹了關于JavaScript中運算符規則和隱式類型轉換的相關資料,需要的朋友可以參考借鑒,下面來一起看看吧。前言本文主要給大家介紹
        推薦度:
        導讀詳細介紹JavaScript中運算符規則和隱式類型轉換:JavaScript中運算符規則的隱式類型轉換是什么 這是每個學習Javascript的新手們都應該知道的一個問題,下面這篇文章主要給大家介紹了關于JavaScript中運算符規則和隱式類型轉換的相關資料,需要的朋友可以參考借鑒,下面來一起看看吧。前言本文主要給大家介紹

        JavaScript中運算符規則的隱式類型轉換是什么? 這是每個學習Javascript的新手們都應該知道的一個問題,下面這篇文章主要給大家介紹了關于JavaScript中運算符規則和隱式類型轉換的相關資料,需要的朋友可以參考借鑒,下面來一起看看吧。

        前言

        本文主要給大家介紹了關于JavaScript運算符規則和隱式類型轉換的相關內容,分享出來供大家參考學習,下面話不多說了,來一起看看詳細的介紹吧。

        隱式類型轉換

        在 JavaScript 中,當我們進行比較操作或者加減乘除四則運算操作時,常常會觸發 JavaScript 的隱式類型轉換機制;而這部分也往往是令人迷惑的地方。譬如瀏覽器中的 console.log 操作常常會將任何值都轉化為字符串然后展示,而數學運算則會首先將值轉化為數值類型(除了 Date 類型對象)然后進行操作。

        我們首先來看幾組典型的 JavaScript 中運算符操作結果,希望閱讀完本部分之后能夠對每一個條目都能進行合理解釋:

        原始類型間轉換

        JavaScript 中我們常說的原始類型包括了數值類型、字符串類型、布爾類型與空類型這幾種;而我們常用的原始類型之間的轉換函數就是 String、Number 與 Boolean:

        最終,我們可以得到如下的 JavaScript 原始類型轉換表(包括復合類型向原始類型轉換的范例):

        原始值轉化為數值類型轉化為字符串類型轉化為 Boolean 類型
        false0"false"false
        true1"true"true
        00"0"false
        11"1"true
        "0"0"0"true
        "1"1"1"true
        NaNNaN"NaN"false
        InfinityInfinity"Infinity"true
        -Infinity-Infinity"-Infinity"true
        ""0""false
        "20"20"20"true
        "twenty"NaN"twenty"true
        [ ]0""true
        [20]20"20"true
        [10,20]NaN"10,20"true
        ["twenty"]NaN"twenty"true
        ["ten","twenty"]NaN"ten,twenty"true
        function(){}NaN"function(){}"true
        { }NaN"[object Object]"true
        null0"null"false
        undefinedNaN"undefined"false

        ToPrimitive

        在比較運算與加法運算中,都會涉及到將運算符兩側的操作對象轉化為原始對象的步驟;而 JavaScript 中這種轉化實際上都是由 ToPrimitive 函數執行的。實際上,當某個對象出現在了需要原始類型才能進行操作的上下文時,JavaScript 會自動調用 ToPrimitive 函數將對象轉化為原始類型;譬如上文介紹的 alert 函數、數學運算符、作為對象的鍵都是典型場景,該函數的簽名如下:

        為了更好地理解其工作原理,我們可以用 JavaScript 進行簡單地實現:

        我們可以簡單覆寫某個對象的 valueOf 方法,即可以發現其運算結果發生了變化:

        如果我們強制將某個對象的 valueOf 與 toString 方法都覆寫為返回值為對象的方法,則會直接拋出異常。

        值得一提的是對于數值類型的 valueOf() 函數的調用結果仍為數組,因此數組類型的隱式類型轉換結果是字符串。而在 ES6 中引入 Symbol 類型之后,JavaScript 會優先調用對象的 [Symbol.toPrimitive] 方法來將該對象轉化為原始類型,那么方法的調用順序就變為了:

      1. obj[Symbol.toPrimitive](preferredType) 方法存在時,優先調用該方法;

      2. 如果 preferredType 參數為 String,則依次嘗試 obj.toString() obj.valueOf() ;

      3. 如果 preferredType 參數為 Number 或者默認值,則依次嘗試 obj.valueOf() obj.toString()

      4. [Symbol.toPrimitive] 方法的簽名為:

        我們同樣可以通過覆寫該方法來修改對象的運算表現:

        比較運算

        JavaScript 為我們提供了嚴格比較與類型轉換比較兩種模式,嚴格比較(===)只會在操作符兩側的操作對象類型一致,并且內容一致時才會返回為 true,否則返回 false。而更為廣泛使用的 == 操作符則會首先將操作對象轉化為相同類型,再進行比較。對于 <= 等運算,則會首先轉化為原始對象(Primitives),然后再進行對比。

        標準的相等性操作符(== 與 !=)使用了Abstract Equality Comparison Algorithm來比較操作符兩側的操作對象(x == y),該算法流程要點提取如下:

      5. 如果 x 或 y 中有一個為 NaN,則返回 false;

      6. 如果 x 與 y 皆為 null 或 undefined 中的一種類型,則返回 true(null == undefined // true);否則返回 false(null == 0 // false);

      7. 如果 x,y 類型不一致,且 x,y 為 String、Number、Boolean 中的某一類型,則將 x,y 使用 toNumber 函數轉化為 Number 類型再進行比較;

      8. 如果 x,y 中有一個為 Object,則首先使用 ToPrimitive 函數將其轉化為原始類型,再進行比較。

      9. 我們再來回顧下文首提出的 [] == ![] 這個比較運算,首先 [] 為對象,則調用 ToPrimitive 函數將其轉化為字符串 "";對于右側的 ![],首先會進行顯式類型轉換,將其轉化為 false。然后在比較運算中,會將運算符兩側的運算對象都轉化為數值類型,即都轉化為了 0,因此最終的比較結果為 true。在上文中還介紹了 null >= 0 為 true 的這種比較結果,在 ECMAScript 中還規定,如果 < 為 false,則 >= 為 true。

        加法運算

        對于加法運算而言,JavaScript 首先會將操作符兩側的對象轉換為 Primitive 類型;然后當適當的隱式類型轉換能得出有意義的值的前提下,JavaScript 會先進行隱式類型轉換,再進行運算。譬如 value1 + value2 這個表達式,首先會調用 ToPrimitive 函數將兩個操作數轉化為原始類型:

        這里將會優先調用除了 Date 類型之外對象的 valueOf 方法,而因為數組的 valueOf 方法的返回值仍為數組類型,則會返回其字符串表示。而經過轉換之后的 prim1 與 prim2 中的任一個為字符串,則會優先進行字符串連接;否則進行加法計算。

        聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

        文檔

        詳細介紹JavaScript中運算符規則和隱式類型轉換

        詳細介紹JavaScript中運算符規則和隱式類型轉換:JavaScript中運算符規則的隱式類型轉換是什么 這是每個學習Javascript的新手們都應該知道的一個問題,下面這篇文章主要給大家介紹了關于JavaScript中運算符規則和隱式類型轉換的相關資料,需要的朋友可以參考借鑒,下面來一起看看吧。前言本文主要給大家介紹
        推薦度:
        標簽: 介紹 java javascript
        • 熱門焦點

        最新推薦

        猜你喜歡

        熱門推薦

        專題
        Top
        主站蜘蛛池模板: 黄色三级三级三级免费看| 亚洲乱码中文字幕综合234| 亚洲熟妇色自偷自拍另类| 日本高清高色视频免费| 亚洲V无码一区二区三区四区观看| sss在线观看免费高清| 国产亚洲成归v人片在线观看| 天堂在线免费观看| 亚洲AV日韩AV永久无码绿巨人| 久久精品视频免费播放| 337p日本欧洲亚洲大胆色噜噜| 亚欧免费视频一区二区三区| 亚洲午夜无码久久久久小说| 国产成人免费网站在线观看 | 亚洲精品综合久久| 国产精品成人免费观看| 国产AV无码专区亚洲AVJULIA| 久久免费高清视频| 亚洲Av高清一区二区三区| 黄网址在线永久免费观看| 一级做a爰片久久毛片免费陪 | 精品成人一区二区三区免费视频| 亚洲一本大道无码av天堂| 暖暖免费日本在线中文| 亚洲系列中文字幕| 日韩电影免费在线观看视频| 人与动性xxxxx免费| 午夜亚洲国产理论秋霞| 最近中文字幕mv免费高清电影| 国产成人久久精品亚洲小说| 久久亚洲高清观看| 德国女人一级毛片免费| 国产福利免费视频| 亚洲人成在线播放| 亚洲伦乱亚洲h视频| 18禁无遮挡无码国产免费网站| 狼人大香伊蕉国产WWW亚洲| 亚洲色四在线视频观看| 毛片免费在线播放| 三级网站免费观看| 亚洲欧美日韩久久精品|