我在StackOverflow上找到了这段代码:
[].sort.call(data, function (a, b) {})
[]
是"排序数据值的简写,然后创建一个名称相同的数组"?
答案 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
通常比使用数组文字更好,因为它更明确。
另见: