Javascript 使用[“sort”](0)调用函数sort?
有人能给我解释一下为什么这个代码是有效的吗Javascript 使用[“sort”](0)调用函数sort?,javascript,Javascript,有人能给我解释一下为什么这个代码是有效的吗 [1,4,5,6,7,2,3]["sort"](0); //[1, 2, 3, 4, 5, 6, 7] 我不太理解这里的语法。同时,为什么我不能像这样选择sort或reverse来执行呢?看起来不管索引是什么,它都会执行反向操作 [1,4,5,6,7,2,3]["sort","reverse"](0); 你要找的可能是 [1,4,5,6,7,2,3]["sort"](); 及 本答案末尾的另一个备选方案 当你真的这么做的时候 [1,4,5,6,
[1,4,5,6,7,2,3]["sort"](0); //[1, 2, 3, 4, 5, 6, 7]
我不太理解这里的语法。同时,为什么我不能像这样选择sort或reverse来执行呢?看起来不管索引是什么,它都会执行反向操作
[1,4,5,6,7,2,3]["sort","reverse"](0);
你要找的可能是
[1,4,5,6,7,2,3]["sort"]();
及
本答案末尾的另一个备选方案
当你真的这么做的时候
[1,4,5,6,7,2,3]["sort","reverse"](0);
首先进行排序,对反向进行求值,然后重新运行反向。所以你有
[1,4,5,6,7,2,3]["reverse"](0);
那是
[1,4,5,6,7,2,3].reverse(0);
虽然反向方法不接受任何参数,但与所有Javascript函数一样,它不介意传入它忽略的额外参数。所以这是有效的
[1,4,5,6,7,2,3].reverse();
返回[3,2,7,6,5,4,1]
你可能想要的是
[1,4,5,6,7,2,3][["sort","reverse"][0]]();
[1,4,5,6,7,2,3][["sort","reverse"][1]]();
分别调用sort和reverse的将数组视为包含属性sort的对象 将0传递给函数,但函数不使用此数字
[1,4,5,6,7,2,3]["sort"](0); //[1, 2, 3, 4, 5, 6, 7]
这和
var a=[1,4,5,6,7,2,3];
a.sort();
及
与
var a=[1,4,5,6,7,2,3];
a.reverse();
将数组视为包含属性排序的对象。
您可以使用方括号中的名称访问JavaScript中对象的任何成员。您以这种方式访问函数sort,然后调用它。JavaScript也不关心是否为函数提供未使用的参数。它只会忽略这个论点 如果您试图提供一个字符串列表来访问一个成员,JavaScript可能会做一些奇怪的事情来做出决定并恢复。不要在上面使用列表。只需调用返回数组的第一个函数,然后调用第二个函数
您可能已经知道的最简洁的方法是简单地编写myList.sort.reverse。通常,JavaScript将允许您处理JS中作为类的对象的任何属性,而如果您使用ES5语义,它又是一个特例函数,最有可能使用的是点符号classname.funcname或括号符号/JSON键classname['funcname']
这与ES6之前的JS是如何构造对象有关,可以就高阶函数、lambda和闭包在其中的作用进行一次冗长而有趣的讨论,但这是一个离题的话题。它的数组内置于原型中。你不必传递任何论点
检查这些文件 让我们一步一步地分解代码
[1,4,5,6,7,2,3]
这是一个数组文本。也就是说,写[1,4,5,6,7,2,3]有点像说新数组1,4,5,6,7,2,3。简单地说,数组文字的计算结果是一个包含所描述内容的新数组
[1,4,5,6,7,2,3]["sort"]
现在这一点很有趣,因为知道[]创建数组文字使我们认为[sort]也是数组文字。不完全是这样-这是Javascript括号表示法的一个示例,我们使用语法someObject[propertyName]访问前面对象的属性,相当于someObject.propertyName。退房
所以我们知道数组的排序属性,Array.sort。写[1,4,5,6,7,2,3][sort]就像说[1,4,5,6,7,2,3].sort。要调用函数,我们使用括号和所需的参数:
[1,4,5,6,7,2,3]["sort"]();
这就像说[1,4,5,6,7,2,3].sort
现在在代码中,您已经传入了0作为Array.sort的参数。但是,此0实际上对排序结果没有影响!这是因为数组的排序方法需要一个。由于0不是函数,Array.sort将直接忽略它。事实上,在Firefox控制台中,运行[1,4,5,6,7,2,3][sort]0;提供了一个TypeError:无效的Array.prototype.sort参数
综上所述,我们可以通过以下方式扭转我们的结果:
[1,4,5,6,7,2,3]["sort"]()["reverse"]();
相当于:
([1,4,5,6,7,2,3]).sort().reverse();
['sort']与.sort相同
[1,4,5,6,7,2,3]["sort"]()["reverse"]();
([1,4,5,6,7,2,3]).sort().reverse();