0

这个 JavaScript 是如何编译的?即使对我来说,它看起来也是错误的,而且我曾经用 perl 编程过。当我在 Google Chrome 控制台中输入此内容时:

window[function () {}] = 42;
>>> 42

什么都没有爆炸。如何?

我耸了耸肩。认为财产显然不能被分配,或者如果是的话,它至少应该被立即销毁。但是看:

window[function () {}]
>>> 42
4

1 回答 1

3

这实际上是一个类型强制的示例,其中 javscript 希望将字符串用作属性名称,因此它调用.toString()函数定义。

当您这样做时window[function () {}],javascript 调用function () {}.toString()并获取"function () {}"成为属性名称的字符串。

你可以通过这样做看到alert(function () {});

因此,您最终得到了一个 property window["function () {}"]

试试这个序列来说明:

window[function () {x=1;}] = 42;
alert(window["function () {x=1;}"]);    // alerts 42
于 2013-03-26T09:33:57.707 回答