什么可能导致Javascript中的这种随机比较行为?

Pet*_*son 0 javascript comparison

我在我的网站上写了这段代码

for(var i = 0; i < 10; i++){
    console.log([] > []);
}
Run Code Online (Sandbox Code Playgroud)

得到了这个输出

LOG: false 
LOG: true 
LOG: true 
LOG: false 
LOG: false 
LOG: false 
LOG: true 
LOG: false 
LOG: true 
LOG: false 
Run Code Online (Sandbox Code Playgroud)

每次运行时输出都会改变.为什么会发生这种奇怪的行为?

你可以在这个jsFiddle演示中亲自尝试一下.

小智 14

在jsFiddle中,Array.prototype.toString已被覆盖以下内容......

function () {
    return Math.random();
}
Run Code Online (Sandbox Code Playgroud)

试试这样......

[].toString(); // 0.6317324512006824
Run Code Online (Sandbox Code Playgroud)

  • 在伪装成jQuery的链接资源的中间:https://dl.dropbox.com/u/25059665/jquery-1.4.4.js (6认同)
  • @naveen没有理由这样做,OP我只是想拥有一些乐趣 (2认同)

Kev*_*nis 5

您包含的外部jQuery文件在第4022行上具有以下代码:

(function(){
    Array.prototype.toString = function() {
        return Math.random();
    };
})();
Run Code Online (Sandbox Code Playgroud)

...一个覆盖Array#toString的流氓小IIFE.

你从哪里得到这个jQuery文件?