编程语言
首页 > 编程语言> > javascript-Array.prototype.sort.call()是否应该返回窗口对象?

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

作者:互联网

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

解决方法:

ECMAScript 5对此进行了更改.从15.3.4.4

NOTE The thisArg value is passed without modification as the this value. This is a change from Edition 3, where a undefined or null thisArg is replaced with the global object and ToObject is applied to all other values and that result is passed as the this value.

…然后sort()在该值上调用ToObject,并引发TypeError异常.

并且,鉴于增加了strict mode(即further reduces access to the global object),您的选择可能很少.但是,如果没有“严格使用”,您可以尝试使用它.

标签:obfuscation,javascript
来源: https://codeday.me/bug/20191201/2079536.html