2016-07-27 15 views
0

Ich habe etwas interessantes gefunden und ich weiß nicht, warum es passiert.Javascript Array Typ Casting

Wenn ich in Google Chrome-Entwickler-Tools versuchen, die beiden folgenden staments

(Array([1,2,3])).filter(function (item, index, array) { 
    return item === 1; 
}); ==> [] 

und

([1,2,3]).filter(function (item, index, array) { 
    return item === 1; 
}); ==> [1] 

Die Ergebnisse sind ein leeres Array für die erste Anweisung und Array mit einem einzelnen Wert (1) für die zweite

Untersuchen der Parameter für die Callback-Funktion, fand ich, dass in der ersten Anweisung die Argumente sind (Array, Index, Wert) und für die zweite st amente sind (Wert, Index, Array).

Untersuchen mit typeof und Konstruktor der beiden Objekte das Ergebnis sind die erwarteten und das gleiche "Objekt" und Array.

Warum passiert das?

Dank

+0

Vielen Dank an alle für Ihre ansewrs, ​​sind die meisten von ihnen richtig, nachdem Sie Ihre Antworten fand ich die Frage welche ich nicht gefragt, weil ich es gedacht wurde, nicht verwandt. Ich habe Typoskript benutzt, aber ich vergesse, dass Casting in Typoskript mit <> nicht mit() geschrieben wird. Deshalb wurde mein Code in der ersten Anweisung transpiliert, was offensichtlich nicht korrekt ist. – Alberto

Antwort

5

Denn das mit Array() nicht, wie Sie define ein Array ist.

Sollte ohne die eckigen Klammern sein, sonst ist es ein Array aus einem einzelnen Element, das auch ein Array ist ([1,2,3]).

Array(1,2,3) 

Die innere Array nie gleich 1 (Sie grundsätzlich [1,2,3] == 1 überprüfen), so ist das Ergebnis ein leeres Array.

0

Array([1,2,3]) Array von Arrays erstellen [[1, 2, 3]] so .map() Funktion wird nur einmal iterieren.

Wenn Sie Array mit Array-Konstruktor Verwendung nächster Syntax erstellen:

Array(1,2,3) 
1

Wenn Sie einen Array definieren Array([1,2,3]) mithilfe diesen Code, dann wird die folgende Array erstellt wird,

[[1,2,3]] 

Da Sie ein Array in ein anderes schieben. Und wenn Sie wirklich die Array-Funktion wollen, ein Array zu erstellen, indem Sie einen Array lesen, dann haben Sie etwas zu schreiben,

Array.apply([], [1,2,3]) 

Aber die oben ist völlig sinnlos. Wieder sage ich, dass es völlig sinnlos ist, da wir ein Array haben, das wir in unserer Hand benötigen. Aber nur für ein Wissen können Sie darüber erfahren.

0

je kürzer desto besser:

[1,2,3].filter(item => item === 1);