Kann jemand den konzeptuellen Unterschied zwischen beiden erklären? Lesen Sie irgendwo, dass der zweite ein neues Array erstellt, indem Sie alle Verweise auf das vorhandene Array zerstören und die .length = 0 das Array nur leert. Aber in meinem Fall hat es nicht funktioniert
//Declaration
var arr = new Array();
Der folgende 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 arr =[]
anstelle von ersetze arr.length=0
, funktioniert das einwandfrei. Kann mir jemand erklären, was hier passiert.
javascript
arrays
Srikanth Rayabhagi
quelle
quelle
arr = arr + $(this).html();
? Wenn Sie Ihrem Array Inhalte hinzufügen, sollten SieArray.push()
stattdessen verwenden.arr
Fall ist, wird das Array bei der ersten Ausführung geleert, aber nach der ersten Ausführung dieses Codeblocks wird auf eine Zeichenfolge verwiesen, sodass von da anarr.length
keine Auswirkung mehr besteht (wie dieslength
schreibgeschützt ist) Eigenschaft von String).arr = []
wirdarr
zu Beginn jeder Iteration wieder in ein leeres Array konvertiert , aber dann konvertieren Sie es sofort wieder in einen String. Also haben Sie entweder Ihren Code gebrochen, als Sie versucht haben, ihn für dieses Beispiel zu vereinfachen, oder Sie machen nur sehr seltsameAntworten:
foo = []
Erstellt ein neues Array und weist einer Variablen einen Verweis darauf zu. Alle anderen Referenzen sind 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.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] []
und es leert das Array zumindest beim ersten Mal. Nach dem ersten Mal tun Sie dies:
… Die das Array mit einem String überschreibt .
Die
length
Eigenschaft einer Zeichenfolge ist schreibgeschützt, sodass die Zuweisung0
keine Auswirkung hat.quelle
Der Unterschied wird hier am besten anhand des folgenden Beispiels demonstriert:
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);
Eine Live-Demo finden Sie hier: http://www.jsfiddle.net/8Yn7e/
Wenn Sie eine Variable festlegen, die auf ein vorhandenes Array verweist, um auf ein neues Array zu verweisen, müssen Sie lediglich die Verknüpfung der Variablen zu diesem ursprünglichen Array aufheben.
Wenn Sie
array.length = 0
(und andere Methoden wiearray.splice(0, array.length)
zum Beispiel) verwenden, leeren Sie tatsächlich das ursprüngliche Array.quelle
array.length = 0
?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)
quelle