Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/silverlight/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用[“sort”](0)调用函数sort?_Javascript - Fatal编程技术网

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();