<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
        主站蜘蛛池模板: 亚洲午夜精品在线| 久久久久亚洲精品日久生情 | 亚洲大尺度无码无码专线一区| 1000部啪啪毛片免费看| 午夜亚洲国产理论秋霞| 久久国产免费观看精品| 久热综合在线亚洲精品| 98精品全国免费观看视频| 91亚洲一区二区在线观看不卡 | 成人免费视频网址| 亚洲av无码成人精品国产| 亚洲妇熟XXXX妇色黄| 国产成人免费ā片在线观看老同学 | 日韩免费视频网站| 看一级毛片免费观看视频| 亚洲人成国产精品无码| 13小箩利洗澡无码视频网站免费| 亚洲成AV人片一区二区| 久草免费在线观看视频| 亚洲夂夂婷婷色拍WW47| 亚洲人成人无码网www国产| 免费观看一区二区三区| 亚洲欧洲日产v特级毛片| 四虎成人免费网址在线| 日本高清不卡中文字幕免费| 日韩亚洲欧洲在线com91tv| 98精品全国免费观看视频| 亚洲影视自拍揄拍愉拍| 亚洲av无码国产精品色在线看不卡| 国产伦精品一区二区免费| 久久精品国产亚洲av水果派| 久久WWW免费人成人片| 一边摸一边爽一边叫床免费视频| 亚洲国产精品一区二区成人片国内| 久久精品国产免费观看三人同眠| 亚洲风情亚Aⅴ在线发布| 亚洲一区二区三区乱码A| 久久精品人成免费| 国产精品亚洲五月天高清| 亚洲高清在线视频| 亚洲中文无码永久免|