Array.prototype.sort.call()是否应该返回窗口对象?

时间:2012-05-30 22:28:48

标签: javascript obfuscation

根据this questionthis 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()是否在最近的浏览器上修复了,还是仍然返回了窗口对象,只是我做错了什么?
  • 如果我不能再使用这种方法,是否还有其他方法可以使用括号,括号,感叹号和+运算符来访问窗口对象?

1 个答案:

答案 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