3

根据这个问题这个自动生成器,我一直在用括号和其他符号来混淆 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()在最近的浏览器上修复的还是它仍然返回窗口对象而只是我做错了什么?
  • 如果是我不能再使用这种方法的情况,有没有其他方法可以只使用括号、括号、感叹号和 + 运算符来访问窗口对象?
4

1 回答 1

3

ECMAScript 5 对此进行了更改。从15.3.4.4 开始

注意thisArg 值作为this值不加修改地传递。这是对第 3 版的更改,其中undefinednull thisArg 被替换为全局对象,并且ToObject应用于所有其他值,并且该结果作为this值传递。

...并sort()调用ToObject,引发TypeError异常。

而且,由于添加了严格模式,这进一步减少了对全局对象的访问,您的选择可能很少。虽然,没有"use strict",您可以尝试使用this.

于 2012-05-30T22:45:58.223 回答