用函数表达式命名对象属性似乎是不可能的.但是它可以编译
Naming an object property with a function expression seems as if it should be impossible. But it compiles
这个JavaScript是如何编译的?即使对我来说,它看起来也是错误的,我曾经用perl编程过。当我在Google Chrome控制台输入这个时:
window[function () {}] = 42;
>>> 42
没有爆炸。如何?
我耸了耸肩。认为财产显然不可能被分配,或者即使被分配,至少也应该立即被销毁。但罗:window[function () {}]
>>> 42
这实际上是一个类型强制转换的例子,javascript希望将字符串用作属性名,因此它在函数定义上调用.toString()
。
当你做window[function () {}]
时,javascript调用function () {}.toString()
并获得字符串"function () {}"
,这成为属性名。
可以通过输入alert(function () {});
所以,你最终得到了一个属性window["function () {}"]
。
试试下面这个序列来说明:
window[function () {x=1;}] = 42;
alert(window["function () {x=1;}"]); // alerts 42
相关文章:
- 节点.js在不可能的地方打印“未定义”
- 谷歌地图Api在CRM Dynamics 2011 iframe"不可能使用显示属性“;消息
- 从数组中随机选择,但在for循环中选择是不可能的;没有按预期工作
- 向具有不同域和基本身份验证的服务器发出 ajax POST 请求是不可能的
- 使用 javascript/jquery/any 动态创建 html 页面客户端.如果不可能,如何使用 php/ajax
- 在现代浏览器中隐藏地址栏是不可能的吗?
- 双击选择框在现代浏览器上是不可能的
- 不可能将html2canvas与ie8一起使用
- 编写一个程序在别人的网站上做某事,是不可能的
- 不可能在一个页面中使用两次JavaScript
- 在测试指令时,我得到typeerror编译不是一个函数
- 异步回调不可能嵌套
- 为什么不可能将对象保存在二维数组中
- 不可能的井字游戏Javascript
- JavaScript:是否不可能将单个“三元”操作扩展到多个层
- 是否不可能在JavaScript中使用多行regex模式来指示输入字符串的开始
- 将弹出窗口的大小调整为最小高度和宽度,然后拖动到以下大小应该是不可能的
- 任务不可能:jQuery属性选择器
- swipebox.js-不可能以相反的顺序滑动或导航幻灯片
- 用函数表达式命名对象属性似乎是不可能的.但是它可以编译