Was ist der wirkliche Unterschied zwischen der Deklaration eines Arrays wie diesem:
var myArray = new Array();
y
var myArray = [];
Was ist der wirkliche Unterschied zwischen der Deklaration eines Arrays wie diesem:
var myArray = new Array();
y
var myArray = [];
Der erste ist der Standardaufruf des Objektkonstruktors. Sie können seine Parameter verwenden, wenn Sie wollen.
var array = new Array(5); //initialize with default length 5
Die zweite gibt Ihnen die Möglichkeit, ein nicht leeres Array zu erstellen:
var array = [1, 2, 3]; // this array will contain numbers 1, 2, 3.
Sie können dasselbe mit dem ausführlichen Konstruktor tun: var array = new Array(1, 2, 3);
Dann können Sie also Folgendes tun var array = [5]
unter Verwendung der eckigen Klammern, aber nicht unter Verwendung des Konstruktors als var array = Array(5)
erzeugt ein leeres Array mit 5 Elementen.
Cdmckay - das ist falsch. var a=[5] wäre ein Array mit einem einzigen Element - der Zahl fünf.
Zum besseren Verständnis []
y new Array()
:
> []
[]
> new Array()
[]
> [] == []
false
> [] === []
false
> new Array() == new Array()
false
> new Array() === new Array()
false
> typeof ([])
"object"
> typeof (new Array())
"object"
> [] === new Array()
false
> [] == new Array()
false
Das obige Ergebnis stammt von der Google Chrome-Konsole unter Windows 7.
"Ein Ausdruck, der Objekte vergleicht, ist nur wahr, wenn die Operanden auf dasselbe Objekt verweisen." (Quelle: developer.mozilla.org/de-US/docs/Web/JavaScript/Reference/ )
Ich kann das anhand dieses Beispiels, das auf Fredriks gutem Beispiel basiert, etwas genauer erklären.
var test1 = [];
test1.push("value");
test1.push("value2");
var test2 = new Array();
test2.push("value");
test2.push("value2");
alert(test1);
alert(test2);
alert(test1 == test2);
alert(test1.value == test2.value);
Ich habe gerade einen weiteren Wert zu den Arrays hinzugefügt und vier Warnungen erstellt: Der erste und der zweite geben uns den Wert, der in jedem Array gespeichert ist, damit wir sicher sein können, dass die Werte übereinstimmen. Sie werden dasselbe zurückgeben! Versuchen Sie nun die dritte, sie gibt falsch zurück, weil
JS-Leckereien test1 als VARIABLE mit einem Datentyp von array und es behandelt test2 als OBJECT mit der Funktionalität eines Arrays und hier gibt es nur geringe Unterschiede.
Der erste Unterschied besteht darin, dass test1 eine Variable aufruft, ohne zu denken. Es gibt einfach die Werte zurück, die in dieser Variable gespeichert sind, ohne Rücksicht auf ihren Datentyp! Aber wenn wir test2 aufrufen, ruft es die Array() Funktion und speichert dann unsere "Gedrängt" Werte in seinem "Wert" Eigenschaft, und dasselbe passiert, wenn wir test2 alarmieren, es gibt die "Wert" Eigenschaft des Array-Objekts.
Wenn wir also prüfen, ob test1 gleich test2 ist, werden sie natürlich niemals true zurückgeben, da die eine eine Funktion und die andere eine Variable (mit dem Typ Array) ist, selbst wenn sie den gleichen Wert haben!
Um sicher zu sein, probieren Sie den 4. Alert aus, dem Sie .value hinzufügen; er wird true zurückgeben. In diesem Fall sagen wir JS: "Ungeachtet des Typs des Containers, ob es sich um eine Funktion oder eine Variable handelt, vergleiche bitte die Werte, die in den einzelnen Containern gespeichert sind, und sag uns, was du gesehen hast!", und genau das passiert.
Ich hoffe, ich habe die Idee dahinter klar ausgedrückt, und entschuldige mich für mein schlechtes Englisch.
Es ist erstaunlich, dass so ein kompletter und völliger Unsinn gewählt wurde. Der Vergleich zwischen den Arrays wird falsch sein, egal wie man sie macht, weil er die Objektidentität vergleicht und es sind unterschiedliche Objekte. Arrays haben keine Werteigenschaft. []
y new Array()
ist identisch; .value
wird sein undefined
in beiden Fällen, und ein Vergleich wird immer falsch sein.
Einverstanden, diese Antwort macht keinen Sinn und zeigt nichts. Es gibt nicht so etwas wie array.value
. und beide typeof []
y typeof new Array()
return object
. Das ist einer der Gründe, warum es eine Funktion namens Array.isArray
Es steckt mehr dahinter, als man auf den ersten Blick sieht. Die meisten anderen Antworten sind richtig ABER AUCH ..
new Array(n)
n
Elemente[1, 2, 3] || []
delete
o [1,,3]
Syntax)for ..
, forEach
, map
, usw.)Ce site wahrscheinlich ist bei älteren Browser-Versionen/Browsern nicht der Fall.
Es gibt keinen Unterschied, wenn Sie Array ohne jegliche Länge initialisieren. Also var a = []
& var b = new Array()
ist gleich.
Wenn Sie aber ein Array mit einer Länge initialisieren wie var b = new Array(1);
wird die Länge des Array-Objekts auf 1 gesetzt, was also gleichbedeutend ist mit var b = []; b.length=1;
.
Dies wird problematisch sein, wenn Sie array_object.push tun, es Element nach dem letzten Element hinzufügen & Länge erhöhen.
var b = new Array(1);
b.push("hello world");
console.log(b.length); // print 2
gegen
var v = [];
a.push("hello world");
console.log(b.length); // print 1
CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.
2 Stimmen
[]
Token:ARRAY_INIT
;new Array
Spielsteine:NEW, IDENTIFIER
;new Array()
Spielsteine:NEW, IDENTIFIER, CALL