JavaScript.一个奇怪的分配句子
JavaScript. An Odd Assignment Sentence
var test=(a=1,[b=2]["sort"])();
这段代码在火狐中工作 结果 test=窗口 (窗口对象(,
它是有效的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
我希望该代码会给出错误。
逗号基本上计算左边的表达式,a=1
然后计算右边的表达式[b=2]["sort"]
,并返回右边表达式的结果。
a=1
将a
设置为 1,如果a
不在当前范围内,则将其创建为全局。
[b=2]
将 b
设置为 2,如果b
不在当前范围内,则将其创建为全局数组,并创建值为 2 的单元素数组。
[b=2]["sort"]
返回数组.sort
方法(它不调用该方法(。
所以括号中的表达式的结果是数组.sort
方法,然后由最终()
执行,结果将被分配给test
,除了它不起作用,因为那时它实际上并没有在数组上调用。
最终作业相当于:var test = ([2].sort)();
.
- 如何将HTML id分配给元素,以及如何将JavaScript应用于元素
- 在循环中分配json值时,值被覆盖
- 动态分配GA增强型电子商务跟踪器
- 将jsp文件下拉列表中的选定项分配给一个java变量(比如String selection)
- 我如何找到一个句子中的所有空格并替换忽略它们
- 如何在jQuery中将函数的输出分配给变量
- 为集合分配大量的模型弹药
- onclick函数需要双击,因为类分配延迟
- Javascript 将变量分配给警报
- 将节点数据分配给另一个变量jstree
- 使用jQuery检查提交时添加到句子中的单词
- 如何发送分配列表<字符串>到JavaScript数组或可枚举对象
- Javascript变量分配-按类别
- 如何将内容分配给元素
- 为变量分配多个nodejs导出返回值时出现问题
- Jslint 错误:需要条件表达式,而是看到分配
- 为什么可以't我将检索到的文档分配给控制台中的变量
- 如何使用javascript标记句子
- 将数组的拼接分配给自身时,Javascript控制台打印不起作用
- JavaScript.一个奇怪的分配句子