Sunday, May 19, 2024
 Popular · Latest · Hot · Upcoming
169
rated 0 times [  173] [ 4]  / answers: 1 / hits: 60292  / 14 Years ago, wed, january 26, 2011, 12:00:00

Can some one explain the conceptual difference between both of them. Read somewhere that the second one creates a new array by destroying all references to the existing array and the .length=0 just empties the array. But it didn't work in my case



//Declaration 
var arr = new Array();


The below one is the looping code that executes again and again.



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


But if I replace the code with arr =[] in place of arr.length=0 it works fine. Can anyone explain what's happening here.


More From » arrays

 Answers
46

foo = [] creates a new array and assigns a reference to it to a variable. Any other references are unaffected and still point to the original array.



foo.length = 0 modifies the array itself. If you access it via a different variable, then you still get the modified array.




Read somewhere that the second one creates a new array by destroying all references to the existing array




That is backwards. It creates a new array and doesn't destroy other references.



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);


gives:



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






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



and it does empty the array, at least the first time. After the first time you do this:




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



… which overwrites the array with a string.



The length property of a string is read-only, so assigning 0 to it has no effect.


[#94045] Monday, January 24, 2011, 14 Years  [reply] [flag answer]
Only authorized users can answer the question. Please sign in first, or register a free account.
aileent

Total Points: 556
Total Questions: 107
Total Answers: 101

Location: Croatia
Member since Fri, Sep 11, 2020
4 Years ago
;