根据this question和this automatic generator,我一直在使用括号和其他符号模糊Javascript - 纯粹出于教育原因,我可以说:)
例如,评估(![]+[])[+!+[]]
会给我一封信"a"
。
但是,似乎示例依赖于[].sort.call()
返回窗口对象。我的问题是,无论何时这在我安装的任何浏览器上都不起作用(Chrome 14,FF 9,IE 9):
//They told me this would return the window object
[].sort.call()
//But I get an exception instead:
"TypeError: Array.prototype.sort called on null or undefined"
所以我问:
[].sort.call()
是否在最近的浏览器上修复了,还是仍然返回了窗口对象,只是我做错了什么?答案 0 :(得分:3)
ECMAScript 5改变了这一点。来自15.3.4.4:
注意 thisArg值未经修改即作为此值传递。这是对第3版的更改,其中未定义或 null thisArg已替换为全局对象和 ToObject 应用于所有其他值,结果将作为此值传递。
...和sort()
在此值上调用ToObject
,抛出TypeError
例外。
而且,鉴于添加了strict mode further reduces access to the global object,您的选择可能很少。但是,如果没有"use strict"
,您可以尝试使用this
。