2016-04-13 7 views
0

So bekomme ich unglaubliche seltsame Java-Skript-Verhalten in einem Chrom-Tab. Die Seite befindet sich hinter einem Login, also kann ich sie nicht posten, aber kann jemand genau erklären, was passiert?Unerwartete Javascript For-Loop-Verhalten in Chrome

for(var z in ""){ console.log(z) } 
contains 
//undefined 

hmm ...

var key = "" 

for(var i in key){ console.log(i) } 
contains 
//undefined 
Object.getOwnPropertyNames(key) 
//["length"] 
Object.getOwnPropertySymbols(key) 
//[] 
window[key] 
//undefined 

Zuerst dachte ich, dies einer jener JS Verhalten und war bereit, es zu JSWTF vorzulegen aber das Verhalten läuft ordnungsgemäß in einem anderen Chrome-Tab:

for(var i in ""){ console.log('ran',i) } 
//undefined 

Wie wurde ein Wert einer leeren Zeichenfolge zugewiesen? Wo ist es? Was macht die for-Schleife?

edit: Die gleiche Seite in Firefox gibt das erwartete Verhalten in der Konsole zurück. Ich habe keine anderen Browser getestet

+1

Sie erwähnen Chrome speziell - bedeutet das, dass sich dieselbe Seite in anderen Browsern nicht so verhält? – nnnnnn

+1

eng verwandt: [Wie definiert man Methode in Javascript auf 'Array.prototype' und' Object.prototype', so dass es nicht in 'for in' Schleife erscheint (http://stackoverflow.com/q/13296340/ 1048572) - Etwas auf dieser speziellen Seite fügte "String.prototype" eine aufzählbare Eigenschaft 'contains' hinzu. – Bergi

+1

Dies bedeutet, dass der String-Prototyp geändert wurde. Versuchen Sie eine Konsole hier auf dem Stack-Overflow zu öffnen und Sie werden viel mehr seltsame Methoden bekommen :) – Damon

Antwort

1

Sie haben an ES6 shim auf der ursprünglichen Seite, die die Funktion zum String Prototyp hinzufügt. Sie können dies selbst tun, indem sie so etwas wie tun: auf includes() ist

String.prototype.contains = 
    function(e) { 
     return this.indexOf(e) > -1; 
    }; 

Die ES6 Funktion letztlich standardisiert, so dass Sie wahrscheinlich, dass die Funktion Namensänderung in der Zukunft sehen werden, wenn ein Entwickler die Shim aktualisiert.

Verwandte Themen