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

資訊專欄INFORMATION COLUMN

為什么這樣也能運行? [ ].concat[1,2,3]

fireflow / 2259人閱讀

摘要:問題下面的代碼的執行結果是什么答案先給出答案。第二步執行一個逗號操作符。因為是一個函數,函數也是對象,所以這是一個屬性訪問運算。那么我們回到之前的問題,其實等價于那么結果自然就是。

This is just for fun.

本文的宗旨是:This is just for fun。這段代碼沒有任何實用的價值,但是通過這段代碼,你可以了解 javascript 被忽略的知識點和語法。

1. 問題

下面的代碼的執行結果是什么?

[].concat[1,2,3]
2. 答案

先給出答案:undefined

大部分人可能會認為這段程序應該拋出語法異常:

Uncaught SyntaxError: ....
3. 分析

這段程序和下面的代碼很像:

[].concat([1,2,3])

concat() 方法將傳入的數組或非數組值與原數組合并,組成一個新的數組并返回。但是上面的代碼沒有使用小括號,所以他們兩個并不是相同的。那么我們來拆開分析一下 [].concat[1,2,3] 是怎么執行的:

首先計算 [].concat,這個的結果是 Array.prototype.concat

第二步執行一個逗號操作符。逗號操作符對它的每個操作對象求值(從左至右),然后返回最后一個操作對象的值。

> 1,2,3
3

第三步執行一個數組訪問運算屬性訪問運算。因為 [].concat 是一個函數,函數也是對象,所以這是一個屬性訪問運算。同理,知道了 [] 是數組訪問運算或屬性訪問運算,你可以很快說出下面代碼的結果:

[[]][0]
[[[1]]][0][0][0]
[[[1]]][[0][0]][0][0]

看似很復雜,你只需要按操作符的優先級和結合性一步一步分解,就可以求出最后的結果。

那么我們回到之前的問題,[].concat[1,2,3] 其實等價于:

Array.prototype.concat[3]

那么結果自然就是 undefined

4. 番外篇

因為 javascript 的原型是可以修改的,因此我們可以定義:

Array.prototype.concat[3] = [1,2,3];

這時我們再調用 [].concat[1,2,3] 就會得到結果 [1,2,3]

掃碼二維碼關注我的公眾號

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/86673.html

相關文章

  • ES6數組方法使用心得以及一些數組操作整理

    摘要:講講的一些數組的新方法吧,之前面試有問到,自己用了一下還挺好用,先看看數組新方法的列表擴展運算符擴展運算符在中我們要將兩個打散數組合并會用到數組對象的方法方法最終會返回一個拼接完的數組,也就是我們所需的結果如果用擴展運算符又是如何操作呢不僅 講講ES6的一些數組的新方法吧,之前面試有問到,自己用了一下還挺好用,先看看數組新方法的列表 擴展運算符 Array.from() Array....

    hosition 評論0 收藏0
  • 那些被忽略的 JavaScript 數組方法細節

    摘要:這兩個方法的參數是一致的,回調函數和執行回調函數時使用的值,回調函數中的參數也是一致的,分別是數組當前元素當前元素索引和數組本身。 青湛(GitHub/mintsweet) 原文鏈接 前言 自以為還算一個比較高產的人吧~但是感覺好久都沒有寫點什么沒有營養的東西了,這一篇本來是打算去年年底都要拿出來說一說的,但是年底事情太多了,加上我真的變懶了拖到現在才要把這個準備了好久的標題完善一下...

    jsyzchen 評論0 收藏0
  • Python源碼理解: �39;+=�39; 和 �39;xx = xx + xx�

    摘要:前菜在我們使用的過程很多時候會用到運算例如輸出不光在加法中使用在字符串的拼接也同樣發揮這重要的作用例如輸出同樣的在列表中也能使用例如輸出為什么上面不同的對象執行同一個會有不同的效果呢這就涉及到的重載然而這不是本文要討論的重點上面的只是前菜而 前菜 在我們使用Python的過程, 很多時候會用到+運算, 例如: a = 1 + 2 print a # 輸出 3 不光在加法中使用, 在...

    learning 評論0 收藏0
  • 數組常用的12種方法

    數組中的常用的12個方法:push、pop、unshift、shift、slice、splice、concat、reverse、sort、join、toString、indexOf。 首先我們要明確以下幾點: 1、方法是干啥用的; 2、每種方法傳遞的參數有多少個,每一個是什么樣的數據類型,每一個參數所代表的意思是什么? 3、返回值類型,和代表的意思; 4、重要的:通...

    Lyux 評論0 收藏0
  • 個人小結--javascript實用技巧和寫法建議

    摘要:類似的情況還有,方法和方法等。今天我說一個最簡單。代碼如下和也可以實現,但是生成的是一個整數,如下分割線其它類型數據轉布爾數據下面的轉換,大家一看就明白了,不多說。緩存變量循環緩存分割線第一段就是每一次循環的時候,都要查詢一次。 1.前言 從大學到現在,接觸前端已經有幾年了,感想方面,就是對于程序員而言,想要提高自己的技術水平和編寫易于閱讀和維護的代碼,我覺得不能每天都是平庸的寫代碼,...

    WilsonLiu95 評論0 收藏0

發表評論

0條評論

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