2009-09-06 4 views
6

Ich habe in der Javascript-Referenz Handbuch auf der IndexOf Seite bei developer.mozilla.org Website gesucht, und bemerkte ein paar Dinge in ihrer Implementierung Code von indexOf, ich hoffe, jemand kann mir erklären.Warum/*, */um Argumente verwenden und warum >>> beim Extrahieren der Länge eines Arrays?

jeder eine Hin- und Rückfahrt in dem mozilla Ort zu speichern, hier ist die gesamte Funktion:

if (!Array.prototype.indexOf) 
{ 
    Array.prototype.indexOf = function(elt /*, from*/) 
    { 
    var len = this.length >>> 0; 

    var from = Number(arguments[1]) || 0; 
    from = (from < 0) 
     ? Math.ceil(from) 
     : Math.floor(from); 
    if (from < 0) 
     from += len; 

    for (; from < len; from++) 
    { 
     if (from in this && 
      this[from] === elt) 
     return from; 
    } 
    return -1; 
    }; 
} 

Was ich nicht verstehe, ist die /*, from*/ in der Funktionsdeklaration und die Null-fill Rechtsverschiebung >>> beim Extrahieren der Länge des Arrays (var len = this.length >>> 0;).

Antwort

10

Der /*, from */ ist ein auskommentierter Parameter. Es scheint jedoch, dass es in den Kommentaren gelassen wurde, um zu zeigen, dass dieser Parameter optional für die Funktion angegeben werden kann.

var from = Number(arguments[1]) || 0; 

Ich glaube, dass arguments[1] der from Wert, wenn übergeben würde.

Die Argumente Array ist besonders nützlich mit Funktionen, die mit einer variablen Anzahl von Argumenten aufgerufen werden kann, oder mit mehr Argumente als sie wurden formell erklärt, um zu akzeptieren. http://www.devguru.com/Technologies/Ecmascript/Quickref/arguments.html

Die >>> ist eine vorzeichenlose Rechtsverschiebung. Es wird hier verwendet, um eine möglicherweise signierte Nummer length in eine vorzeichenlose Zahl zu konvertieren.

Extract from Professional JavaScript for Web Developers

http://www.c-point.com/javascript_tutorial/jsoprurshift.htm

+0

Danke, macht jetzt Sinn. Mir ist nicht aufgefallen, dass die Längeneigenschaft alles andere als unsigniert sein kann, Javascript rätselt mich manchmal :) –

3

Der /*, from */ ist ein optionaler Parameter. Notice var from = Number(arguments[1]) || 0; danach. Wenn im Funktionsaufruf ein zweiter Parameter übergeben wurde, wird die Variable von darauf gesetzt.

Nicht sicher über die vorzeichenlose Rechtsverschiebung. Macht für mich keinen Sinn.

3

Die /*, from*/ in der Funktionsdeklaration ist nur ein Kommentar des Autors zu sagen, dass es einen zweiten optionalen Parameter mit dem Namen von gibt. Es wurde als Kommentar geschrieben, so dass es nicht Teil der Signatur ist (Array.prototype.indexOf.length gibt 1 zurück).

Und die richtige Verschiebung wird wahrscheinlich verwendet, um immer einen ganzzahligen Wert von this.length zu erhalten.

Verwandte Themen