gpt4 book ai didi

JavaScript。一个奇怪的赋值语句

转载 作者:塔克拉玛干 更新时间:2023-11-02 22:52:55 27 4
gpt4 key购买 nike

var test=(a=1,[b=2]["sort"])();

此代码在 Firefox 中有效,结果为 test=window(窗口对象),

它是有效的 JavaScript 代码吗? (我没能在 JavaScript 引用资料中找到它)

最佳答案

它是“有效的”,但在我看来完全是病态的。从 var 的名称来看,我猜想有人在某个时候想出了这个作为功能测试,但没有添加注释来解释原因。

这就是它正在做的事情。首先,这两个赋值将解析为赋值,所以我们可以替换它们(它们确实赋值变量,这是一个副作用,但这不影响这个表达式的评估):

var test=(1, [2]["sort"])();

["sort"] 就是 .sort:

var test=(1, [2].sort)();

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

var test=([2].sort)();

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

在非严格模式下,没有上下文调用的函数将 window 作为它的 this

因此它尝试对 window 进行排序并返回结果,如您所见,它是 window

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

关于JavaScript。一个奇怪的赋值语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8413071/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com