[]代表什么?

时间:2016-01-25 18:24:38

标签: javascript arrays

我在StackOverflow上找到了这段代码:

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

[]是"排序数据值的简写,然后创建一个名称相同的数组"?

1 个答案:

答案 0 :(得分: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通常比使用数组文字更好,因为它更明确。

另见: