2012-10-31 12 views
5

bemerkt I in mehreren Array-Verfahren Shims MDN wie this one auf Leitung 7, dass sie die folgende Syntax:Was macht Objekt (this)?

var t = Object(this); 

Wo this ein Array ist. Es deutet nicht nur auf meinen Validator hin, ich weiß auch nicht, was es macht.

Kann jemand Licht werfen?

+0

Ist das nicht etwas wie Kopierkonstruktoren in C++? –

+2

mögliches Duplikat von [Was ist der Punkt von "var t = Objekt (this)" in der offiziellen Implementierung von forEach?] (Http://stackoverflow.com/questions/6498487/whats-the-point-of-va-t -objectdies-in-the-official-implementation-of-for) – finnw

Antwort

3

Soweit ich das beurteilen kann, ist die einzige Verwendung darin darin, den Fall abzudecken, wenn Sie ein Zeichenfolgenliteral an Array.prototype.indexOf übergeben. Wenn Sie es entfernen und eine Zeichenfolge übergeben in eine Fehlermeldung angezeigt:

TypeError: Cannot use 'in' operator to search for '0' in string

jedoch durch die Stringliteral zu einer Instanz von String Gießen, erhalten Sie für jedes Zeichen der Zeichenfolge mit einer numerischen Eigenschaft mit einem Gegenstand nach oben und es ist da ein normales Objekt, können Sie den in Operator auf sie und das Verfahren den Index des Zeichens in der Zeichenkette verwenden können, wird zurückkehren:

Array.prototype.indexOf.call("hello", "e"); // Returns 1 

hier an example with the cast to Object, und hier ist an example without it.


In allgemeineren Fällen etwas an den Object Konstruktor wird versuchen, das Ding zu einem Objekt zu konvertieren. Sie können also ein String-Literal übergeben und eine Instanz von String zurückholen oder ein numerisches Literal übergeben und eine Instanz von Number abrufen.

+0

Es hätte auch für keinen booleschen, number, 'null' oder 'undefined' funktioniert - im Grunde jeden primitiven Wert. – Bergi

+0

@Bergi - Ich bin nicht ganz sicher, was der Grund für diesen Code war ... es ist nicht in der Polyfill [derzeit auf MDN] (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Referenz/Global_Objects/Array/indexOf # Polyfill). Ich erinnere mich vage daran, nach dieser Antwort zu forschen, aber das war offensichtlich vor einiger Zeit. –

+0

Ja, [MDN ist ein Wiki] (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/indexOf$history?limit=all). – Bergi