2016-01-25 157 views
4

我發現在計算器上這段代碼:[]代表什麼?

[].sort.call(data, function (a, b) {}) 

[]的簡寫「之類的數據值,然後使具有相同名稱的數組」?

+2

可能需要一些更多的上下文這行代碼。就目前而言,它甚至不是有效的javascript。 –

+4

這只是簡單地初始化一個空數組'''''。它也被稱爲數組文字。看到這個:[stackoverflow.com/questions/1094723/](http://stackoverflow.com/questions/1094723/what-is-array-literal-notation-in-javascript-and-when-should-you-use-它)更多細節... – War10ck

+1

[]是一個數組,它在這裏用於調用不是數組的數據:https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects /功能/通話 – mplungjan

回答

13

[]只是數組文字。它是一個空數組,因爲它不包含任何元素。在這種情況下,它是Array.prototype的快捷方式。

此代碼基本上允許您使用Array.prototype.sort()方法,即使對於非數組的值,例如arguments

進一步解釋:

[] // Array literal. Creates an empty array. 
    .sort // Array.prototype.sort function. 
    .call(// Function.prototype.call function 
    data, // Context (this) passed to sort function 
    function (a, b) {} // Sorting function 
) 

假設你有一個類似數組的對象,像這樣:

var obj = {0: "b", 1: "c", 2: "a", length: 3}; 

它的陣列狀,因爲它有數字鍵和length財產。但是,您不能只調用.sort()方法,因爲Object.prototype沒有這種方法。您可以在您的對象的上下文中調用Array.prototype.sort()。這正是Function.prototype.call()方法的用處。 .call()方法的第一個參數是傳遞給函數的上下文,其餘的是傳遞給函數的參數。例如:

Array.prototype.sort.call(obj) 

返回排序對象,因爲Array.prototype.sort行爲就像它是obj方法。

請注意,使用Array.prototype通常比使用數組文字更好,因爲它更明確。

參見: