JavaScript的.一个奇怪的作业句子

Mat*_*son 3 javascript arrays

var test=(a=1,[b=2]["sort"])();
Run Code Online (Sandbox Code Playgroud)

此代码适用于Firefox生成的test = window(window object),

它是有效的JavaScript代码吗?(我在JavaScript参考中找不到它)

N3d*_*st4 6

这是"有效的",但看起来完全是病态的.从名称来看var,我猜有人在某个时候想出了这个功能测试,但未能添加评论解释原因.

所以这就是它正在做的事情.首先,两个赋值将解析为赋值,因此我们可以替换它们(它们确实分配变量,这是副作用,但这不会影响对此表达式的求值):

var test=(1, [2]["sort"])();
Run Code Online (Sandbox Code Playgroud)

["sort"]只是.sort:

var test=(1, [2].sort)();
Run Code Online (Sandbox Code Playgroud)

逗号运算符将返回括号中的最后一个值,因此我们可以丢失1:

var test=([2].sort)();
Run Code Online (Sandbox Code Playgroud)

所以现在括号中的部分正在创建一个数字为2的数组,并找到该sort数组的方法.然后它调用该方法,但由于第一组括号,它在没有指定上下文的情况下调用它.

在非严格模式下,没有上下文调用的函数window就是它的this.

所以它试图排序window并返回结果window,正如你所看到的那样.

在Firebug和Chrome中的JS控制台的严格模式下,调用的函数没有上下文得到undefined它们this,这意味着这个例子抛出了一个错误,就像上面提到的mplungjan.https://developer.mozilla.org/en/JavaScript/Strict_mode