javascript - 用函数表达式命名对象属性似乎是不可能的。但它编译

标签 javascript google-chrome

这个 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/

相关文章:

javascript - chrome/firefox 浏览器范围处理的差异

javascript - CSS 和 JScript 的谷歌浏览器问题

javascript - 当我在特定区域鼠标悬停 && mouseout 时,如何禁用/取消 setTimeOut?

javascript - 为什么JS的日期会这样呢?

c# - 如何将字符串从 ASP.NET 代码后面传递到本地网络存储?

python - 如何在 Python 中使用 Selenium 打开 chrome 开发者控制台?

javascript - 修复谷歌浏览器上的蓝线

javascript - 使用 jQuery 计算各节中单选按钮的总和

使用 chrome 文件系统写入时,Javascript 字符串中存在 NULL 字符

css - @page :first { margin: . .. } 在 Chrome 错误中?