有人可以向我解释为什么这段代码有效吗?
[1,4,5,6,7,2,3]["sort"](0); //[1, 2, 3, 4, 5, 6, 7]
Run Code Online (Sandbox Code Playgroud)
我不太了解这里的语法.同时,为什么我不能像这样选择排序或反向执行?无论索引是什么,看起来总是反向做.
[1,4,5,6,7,2,3]["sort","reverse"](0);
Run Code Online (Sandbox Code Playgroud)
让我们一步一步地分解您的代码.
[1,4,5,6,7,2,3]
Run Code Online (Sandbox Code Playgroud)
这是一个数组文字.也就是说,写字[1,4,5,6,7,2,3]有点像说new Array(1,4,5,6,7,2,3).简单地说,数组文字计算到具有所描述内容的新数组.
[1,4,5,6,7,2,3]["sort"]
Run Code Online (Sandbox Code Playgroud)
现在这一点很有趣,因为知道[]创建数组文字使我们认为["sort"]也是一个数组文字.不完全 - 这是Javascript 括号表示法的一个示例,我们使用语法访问前面对象的属性someObject["propertyName"],相当于someObject.propertyName.有关括号表示法的更多信息,请查看此SO答案.
所以我们知道s 的sort属性,是一个函数.写就像是在说.要调用函数,我们使用带有我们想要的参数的括号:ArrayArray.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"]();
Run Code Online (Sandbox Code Playgroud)
这就像说([1,4,5,6,7,2,3]).sort();.
现在在你的代码中,你已经传入了一个0作为参数Array.sort.但是,这0实际上对排序结果没有影响!那是因为sort数组的方法采用了可选的比较函数.由于0不是一个功能,Array.sort将简单地忽略它.事实上,在Firefox控制台中,运行[1,4,5,6,7,2,3]["sort"](0);给了我们一个TypeError: invalid Array.prototype.sort argument.
总而言之,我们可以通过以下方式改变我们的结果:
[1,4,5,6,7,2,3]["sort"]()["reverse"]();
Run Code Online (Sandbox Code Playgroud)
相当于:
([1,4,5,6,7,2,3]).sort().reverse();
Run Code Online (Sandbox Code Playgroud)