2010-09-09 5 views

Antwort

8

Nun, natürlich gibt es Implementierung Fehler, die schwerste, dass ich mit sind auf JScript, die Microsoft-Implementierung des Standards, zum Beispiel haben zu tun hatte:

Identifier von FunctionExpressions sollte nur zugänglich sein, der innere Umfang der Funktion selbst:

(function foo() { 
    alert(typeof foo); // "function" 
})(); 

alert(typeof foo); // should be "undefined", on IE shows "function" 

der Fehler auf allen aktuellen IE-Versionen vorhanden ist, hat es nur auf IE9 Previews behoben.

Und tatsächlich ist noch schlimmer, es schafft zwei Objekte Funktion, zum Beispiel:

var foo = function bar() {}; 

if (typeof bar != 'undefined') { // the case of IE 
    alert(foo === bar); // false!!! 
} 

Ein weiterer bekannter JScript Fehler ist die "DontEnum Bug", wenn ein Objekt in seinem Umfang Kette eine Eigenschaft enthält, die nicht abzählbar ist (hat das { DontEnum } Attribut), wenn die Eigenschaft auf einem anderen Objekt abgeschattet wird, wird es als nicht-zählbare, zum Beispiel bleiben:

var dontEnumBug = {toString:'foo'}.propertyIsEnumerable('toString'); 

es wird bewerten, um false auf IE, dies führt zu Problemen, wenn usin g die for-in Anweisung, weil die Eigenschaften nicht besucht werden.

JScript ist die Implementierung, die die meisten Probleme hat - obwohl die IE9-Implementierung wirklich viel besser wird.

Empfohlene Artikel:

+1

http://stackoverflow.com/questions/3663775/object-name-same-a-function-name/ Ihre Antwort auf diese Frage Frage würde eine nette Ergänzung dazu sein. Der FunctionStatement-Teil mindestens. –

+0

Schöne Beispiele. Wenn Sie (oder jemand anderes) mehr Artikel haben, die die Unterschiede zwischen ecmascript 3-Implementierungen in Browsern hervorheben, senden Sie sie :) – AlfaTeK

Verwandte Themen