2015-05-26 11 views
10

Auf ein paar polyfill Beispiele in MDN für einige Array Prototyp Funktionen gibt es die folgenden zwei Zeilen (z .: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/find): (?)Was bedeutet Objekt ([]); machen?

var list = Object(this); 
var length = list.length >>> 0; 

nehme ich an das erste Beispiel ist Autoboxing. Aber was ist sein Zweck, wenn this immer ein Array ist?

Und Linie 2, wie unterscheidet sich diese zu:

var length = list.length || 0; 

Dank!

+2

Für den Chevron-Operator ist die beste Antwort, die ich bis jetzt gefunden habe, http://stackoverflow.com/a/1822769/4573999 –

Antwort

6

Dadurch ist es möglich, die Funktion (unter Verwendung von call oder apply) im strikten Modus auf etwas zuzugreifen, das kein Array ist, während die Spezifikation befolgt wird.

Wenn es sich um eine Instanz von Array oder ein Array-ähnliches Objekt handelt, ändert sich nichts.

Aber hier, wie diese Linie list gewährleistet ein Objekt folgt eine Prüfung, dass weder thisnull oder undefined ist, und wie andere Werte nicht folgende Zugriffe scheitern (außer ganz besondere Fälle, dass Object(this) nicht lösen würden, wie versagende Accessoren), ich bin mir nicht sicher, ob es wirklich einen Punkt gibt. Vielleicht wurde es vor dem Check gesetzt, oder vielleicht ist es hier nur für spezielle native Objekte. Eine andere Möglichkeit ist, dass sie (zu?) Strikt Schritt für Schritt dem specification folgt und toObject anwenden möchte.

list.length >>> 0 ist besser als || 0 in der Tatsache, es rundet auf die nächst niedrigere positive Ganzzahl (in einem 32 Bit-Bereich). Ich bin mir nicht sicher, warum >> hier nicht verwendet wurde, da es nicht besser zu sein scheint, bis 4294967295 statt -1 zu iterieren (d. H. Keine Zeit verlieren).

+0

Vielen Dank! Irgendeine Idee auf dem Bit, das gegen ODER verschiebt? – keldar

+0

'>>>' ist besser, weil Ergebnis ist immer * endlich * * nicht-negativ * * Ganzzahl *, während '||' wird glücklich String oder Objekt zurückgeben –

+0

Wenn Sie sagen 'möglich, die Funktion' die Funktion zu tun was meinen Sie? – AmmarCSE