2017-02-04 2 views
0

Ich analysiere native JavaScript-Methode Array.prototype.forEach() Code. Ich habe es von MDN polyfill basierend auf Original ES5. Ich begegnete solchen Ausdruck, der Zweck der Nutzung in diesem Punkt verstehe ich nicht:Array.prototype.forEach() - warum der Code dieser Methode bitweisen Verschiebungsoperator besitzt?

// 2. Let lenValue be the result of calling the Get() internal 
// method of O with the argument "length". 
// 3. Let len be toUint32(lenValue). 
var len = O.length >>> 0; 

ich polyfill nahm forEach von MDN, fügte ein paar console.log() zu überprüfen, was dort vor sich geht und tauschte es für native forEach(). Meine Schlussfolgerung ist, dass ich den Zweck der Anwendung einer solchen bitweisen Verschiebung nicht kenne. Ein Stück Code, das ich dies debuggen bin mit:

console.log('O: ', O, ' /this: ', this); 
var len = O.length >>> 0; 
console.log('len: ', len, ' /len === O.length: ', len === O.length, ' /len == O.length: ', len == O.length); 

Ich schaffe etwas Array, auf dem ich „vorbereitet‘ forEach Methode aufrufen, und ich verstehe nicht den Unterschied zwischen variablen len und Eigentum O.length:

[1,3,5].forEach(elem => { console.log('elem: ', elem); }) 
// O: [1, 3, 5] /this: [1, 3, 5] 
// len: 3 /len === O.length: true /len == O.length: true 
// elem: 1 
// elem: 3 
// elem: 5 

das Array 3 Elemente variable und len enthält, das Ergebnis der bitweisen Verschiebung hat auch diesen Wert auszudrücken.

ich schrieb auch so so:

3 >>> 0 
// 3 

Das Ergebnis der bitweisen Verschiebung ist genau wie die Länge der Array. Darüber hinaus ergibt der Vergleich zwischen dem Doppel- und Dreifach-Vergleichsoperator ==/===true. Array-Länge kann weder negativ noch Bruchzahl sein. Also, was ist der Punkt der Verwendung von bitweiser Verschiebung in nativen forEach() Methodencode?

+1

Der Kommentar erläutert den Grund - die ECMAScript-Spezifikation besagt, dass der Wert in ein UInt32 konvertiert werden sollte. Dies ist wahrscheinlich ein Duplikat von [diese ähnliche Frage] (https://stackoverflow.com/questions/22335853/hack-to-convert-javascript-number-to-uint32). –

Antwort

1

Es gibt viele Gründe.

Sie müssen nicht wissen oder interessieren sich für sie, aber es gibt Gründe.