这个 JavaScript 是如何编译的?即使对我来说,它看起来也是错误的,我曾经用 perl 编程过。当我在 Google Chrome 控制台中输入以下内容时:
window[function () {}] = 42;
>>> 42
没有爆炸。如何?
我耸耸肩。认为属性(property)显然不可能被分配,或者如果是的话,至少应该立即被销毁。但是瞧:
window[function () {}]
>>> 42
最佳答案
这实际上是类型强制的一个示例,其中 javscript 希望使用字符串作为属性名称,因此它在函数定义上调用 .toString()
。
当您执行 window[function () {}]
时,javascript 会调用 function () {}.toString()
并获取字符串 "function ( ) {}"
成为属性名称。
您可以通过执行 alert(function () {});
因此,您最终得到一个属性window["function () {}"]
。
试试这个序列来说明:
window[function () {x=1;}] = 42;
alert(window["function () {x=1;}"]); // alerts 42
关于javascript - 用函数表达式命名对象属性似乎是不可能的。但它编译,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15633491/