Unterschied zwischen Array.length = 0 und Array =[]?

Lesezeit: 4 Minuten

Benutzer-Avatar
Srikanth Rayabhagi

Kann jemand den konzeptionellen Unterschied zwischen beiden erklären. Lesen Sie irgendwo, dass der zweite ein neues Array erstellt, indem alle Verweise auf das vorhandene Array zerstört werden und die .length=0 das Array nur leert. Aber es hat in meinem Fall nicht funktioniert

//Declaration 
var arr = new Array();

Der untere ist der Schleifencode, der immer wieder ausgeführt wird.

$("#dummy").load("something.php",function(){
   arr.length =0;// expected to empty the array
   $("div").each(function(){
       arr = arr + $(this).html();
   });
});

Aber wenn ich den Code durch ersetze arr =[] anstelle von arr.length=0 es funktioniert gut. Kann jemand erklären, was hier passiert.

  • Warum läuft Ihr Code in einer Schleife? arr = arr + $(this).html();? Wenn Sie Ihrem Array Dinge hinzufügen, sollten Sie verwenden Array.push() stattdessen.

    – BoltClock

    26. Januar 2011 um 11:59 Uhr


  • Es ist lustig, weil es bereits eine 9 positive Antwort gibt, aber es ist immer noch so unklar was die Absicht des OP ist …

    – gblazex

    26. Januar 2011 um 13:03 Uhr


  • @Bolt – Ich habe hier nur das Beispiel des Codes gegeben, der ursprüngliche Code fügt die Elemente dynamisch zum Array hinzu. Ich habe mich dafür entschieden, die Elemente anstelle von push () an das Array anzuhängen. Macht das einen großen Unterschied in dem, was ich suche?

    – Srikanth Rayabhagi

    26. Januar 2011 um 13:26 Uhr

  • Befindet sich der zweite Codeblock oben in einer Schleife? Wenn dies der Fall ist, wird das Array bei der ersten Ausführung geleert, jedoch nach der ersten Ausführung dieses Codeblocks arr wird ein Verweis auf eine Zeichenfolge sein, also von da an arr.length wird keine Wirkung haben (wie length ist eine schreibgeschützte Eigenschaft von String). arr = [] wird konvertieren arr zurück in ein leeres Array zu Beginn jeder Iteration, aber dann konvertieren Sie es sofort wieder in einen String. Also hast du entweder deinen Code kaputt gemacht, als du versucht hast, ihn für dieses Beispiel zu vereinfachen, oder du machst einfach sehr seltsame Sachen: P

    – Joe Dyndale

    10. Dezember 2012 um 15:10 Uhr

  • mögliches Duplikat von How to empty a array in JavaScript?

    – Beschatten Sie den Kinderzauberer

    3. September 2013 um 11:49 Uhr

Benutzer-Avatar
QUentin

foo = [] erstellt ein neues Array und weist einer Variablen eine Referenz darauf zu. Alle anderen Verweise sind davon nicht betroffen und verweisen weiterhin auf das ursprüngliche Array.

foo.length = 0 ändert das Array selbst. Wenn Sie über eine andere Variable darauf zugreifen, erhalten Sie immer noch das geänderte Array.

Irgendwo gelesen, dass der zweite ein neues Array erstellt, indem er alle Verweise auf das vorhandene Array zerstört

Das ist rückwärts. Es erstellt ein neues Array und zerstört keine anderen Referenzen.

var foo = [1,2,3];
var bar = [1,2,3];
var foo2 = foo;
var bar2 = bar;
foo = [];
bar.length = 0;
console.log(foo, bar, foo2, bar2);

gibt:

[] [] [1, 2, 3] []

arr.length =0;// expected to empty the array

und es leert das Array zumindest beim ersten Mal. Nach dem ersten Mal tun Sie dies:

arr = arr + $(this).html();

… was das Array mit a überschreibt Schnur.

Das length Eigenschaft einer Zeichenfolge ist schreibgeschützt, also Zuweisung 0 darauf hat keine Wirkung.

Benutzer-Avatar
Matt

Der Unterschied lässt sich am besten an folgendem Beispiel demonstrieren:

var arrayA = [1,2,3,4,5];

function clearUsingLength (ar) {
    ar.length = 0;
}

function clearByOverwriting(ar) {
    ar = [];
}

alert("Original Length: " + arrayA.length);
clearByOverwriting(arrayA);
alert("After Overwriting: " + arrayA.length);
clearUsingLength(arrayA);
alert("After Using Length: " + arrayA.length);

Davon ist hier eine Live-Demo zu sehen: http://www.jsfiddle.net/8Yn7e/

Wenn Sie eine Variable, die auf ein vorhandenes Array zeigt, so einstellen, dass sie auf ein neues Array zeigt, unterbrechen Sie lediglich die Verknüpfung der Variablen mit diesem ursprünglichen Array.

Wenn Sie verwenden array.length = 0 (und andere Methoden wie array.splice(0, array.length) zum Beispiel), Sie sind eigentlich Leeren des ursprünglichen Arrays.

  • Welche Browser werden nicht unterstützt array.length = 0?

    – Arthaey

    4. Januar 2013 um 19:31 Uhr

  • @ArthaeyAngosii: Heh, keine, die mir bekannt sind. Anscheinend war ich naiv und habe es genossen, im Januar 2011 mit Müll zu antworten … danke für den Hinweis ;).

    – Matt

    4. Januar 2013 um 19:39 Uhr

Bist du sicher, dass es wirklich funktioniert?

Ich habe hier ein kleines Experiment durchgeführt, und der Versuch, ein Array mit einem String “hinzuzufügen”, führte zu einem String.

function xyz(){
    var a = [];
    alert(typeof(a+$("#first").html()));
    // shows "string"
}

http://www.jsfiddle.net/4nKCF/

(getestet in Opera 11)

1081410cookie-checkUnterschied zwischen Array.length = 0 und Array =[]?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy