91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

javascript拆箱裝箱和類型轉換的方法

發布時間:2022-03-03 09:39:26 來源:億速云 閱讀:140 作者:iii 欄目:web開發

這篇“javascript拆箱裝箱和類型轉換的方法”文章的知識點大部分人都不太理解,所以小編給大家總結了以下內容,內容詳細,步驟清晰,具有一定的借鑒價值,希望大家閱讀完這篇文章能有所收獲,下面我們一起來看看這篇“javascript拆箱裝箱和類型轉換的方法”文章吧。

javascript拆箱裝箱和類型轉換的方法

基本數據類型:stringnumberboolean

引用類型:objectfunction

不存在的類型:undefined

StringNumberBoolean分別屬于stringnumberboolean三個原始類型的包裝類型,它們的對象屬于引用類型。

裝箱

裝箱是指把基本數據類型轉換為對應的引用類型的操作,該過程主要是指stringnumberboolean類型的數據,通過StringNumberBoolean進行包裝成為引用類型數據的過程。

// 隱式裝箱var s1 = 'Hello World'; 
var s2 = s1.substring(2);

上面第二行代碼的執行步驟其實是這樣的:

  1. 使用new String('Hello World')創建一個臨時的實例對象;

  2. 使用臨時對象調用substring方法;

  3. 將執行結果賦值給s2;銷毀臨時的實例對象。

上面的步驟轉換為代碼,如下:

// 顯式裝箱var s1 = 'Hello World'; 
var tempObj = new String('Hello World');
var s2 = tempObj.substring(2);

拆箱

拆箱是把引用類型轉換為基本的數據類型。

關于拆箱過程中的ToPrimitive

類型轉換

運算符對于兩端的變量,都有一個期待類型,在javascript中,凡是不滿足運算符期待類型的變量,都會做做隱式轉換。

邏輯運算符

在進行邏輯運算時,隱式轉換只有一個標準:只有 nullundefined''NaN0false 表示 false,其他的情況都是 true,比如 {} , []

算術運算符
  1. 如果算術運算符兩端均為number類型的數據,直接進行計算;

  2. 如果算術運算符兩端存在非number的基本數據類型,則對非number的運算數使用Number()進行裝箱,然后對返回值進行拆箱為number類型,參與計算;

  3. 算術運算符兩端存在引用數據類型,則先對引用類型進行拆箱操作,如果結果為非number類型,則根據條件2執行,否則執行條件1

1 - true 
// 0, 首先 Number(true) 轉換為數字 1, 然后執行 1 - 11 - null 
// 1,  首先把 Number(null) 轉換為數字 0, 然后執行 1 - 01 * undefined 
//  NaN, Number(undefined) 轉換為數字是 NaN , 然后執行 1 * NaN2 * ['5'] 
//  10, ['5'] 依照ToPrimitive規則進行拆箱會變成 '5', 然后通過 Number('5') 進行拆裝箱再變成數字 5123 + {valueOf:()=>{return 10}}   
// 133  {valueOf:()=>{return 10}} 依照ToPrimitive規則會先調用valueOf,獲得結果為10

+作為單目運算符出現在變量的前面時,表示的意思是將變量轉換為Number類型

+"10" 	
// 10  同 Number("10")+['5']  
// 5   ['5']依照ToPrimitive規則會變成 '5', 然后通過`Number`的拆箱操作再變成數字 5
字符串連接符

字符串連接符的符號同算術運算符的+

  1. 如果算術運算符兩端均為string類型的數據,直接進行連接

  2. 如果運算符的兩端存在非string的基本類型,則對非string的基本類型數據使用String()進行裝箱,然后對返回值進行拆箱為基本類型,參與字符串拼接。

  3. +兩端兩端存在引用數據類型,則先對引用類型進行拆箱操作,如果結果為非string類型,則根據條件2執行,否則執行條件1

關系運算符
  • NaN和其他任何類型,做任何關系運算永遠返回false(包括和他自己)。如果想判斷一個變量是不是NaN , 可以通過Number.isNaN()來判斷。

  • null == undefined比較結果是true,除此之外,nullundefined和其他的(不包括它們自身)任何結果的比較值都為false

    這里是規則定義的,null 為 object 的類型,可是調用valueOf或者toString都會有語法錯誤,這里直接記住結果就行。

  • 一般情況:

    1. 如果算術運算符兩端均為number類型的數據,直接進行計算;

    2. 如果算術運算符兩端存在非number的基本數據類型,則對非number的運算數使用Number()進行裝箱,然后對返回值進行拆箱為number類型,參與計算;

    3. 算術運算符兩端存在引用數據類型,則先對引用類型進行拆箱操作,如果結果為非number類型,則根據條件2執行,否則執行條件1

{} == !{}  
// false   Number({}.valueOf().toString())==> NaN , 所以題目等同于 NaN == false , NaN 和 任何類型比較都是 false[] == []  
// false  內存地址不同![] == 0  
// true   ![]==>false , 所以題目等同于 false==0 , Number(false)==>0 ,  所以結果為 true

一些題目

  1. [] == ![]

        - 第一步,![] 會變成 false
        - 第二步,[]的valueOf是[],[]是引用類型,繼續調用toString,題目變成: "" == false
        - 第三步,符號兩端轉換為Number, 得到 0==0
        - 所以, 答案是 true
  2. [undefined] == false

        - 第一步,[undefined]的valueOf結果為 [undefined],然后[undefined]通過toString變成 '' ,所以題目變成  '' == false
        - 第二步,符號兩端轉換為Number, 得到 0==0
        - 所以, 答案是 true !
  3. 如何使a==1 && a==2 && a==3的結果為 true

    var a = {
        value: 0,
        valueOf: function() {
            this.value += 1;
            return this.value    }};console.log(a == 1 && a == 2 && a == 3) // true
  4. 如何使a===1&&a===2&&a===3的結果為 true

    // 使用 defineProperty 進行數據劫持var value = 0;Object.defineProperty(window,"a",{
        get(){
            return ++value;
        }})console.log(a===1&&a===2&&a===3)  //true
  5. 實現一個無限累加函數

  6. 柯里化實現多參累加

以上就是關于“javascript拆箱裝箱和類型轉換的方法”這篇文章的內容,相信大家都有了一定的了解,希望小編分享的內容對大家有幫助,若想了解更多相關的知識內容,請關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

黄梅县| 桐庐县| 巫溪县| 千阳县| 米泉市| 涟源市| 新乡市| 大城县| 仪征市| 壤塘县| 齐齐哈尔市| 拜城县| 繁昌县| 金堂县| 柞水县| 二手房| 新建县| 津市市| 冕宁县| 来凤县| 泗水县| 太湖县| 喀喇沁旗| 彭山县| 米泉市| 湟中县| 渭南市| 屏山县| 沂南县| 海伦市| 温泉县| 电白县| 双鸭山市| 大同县| 黎城县| 昭苏县| 共和县| 神农架林区| 永年县| 南陵县| 襄樊市|