68 votes

Différence entre Array.length = 0 et Array = []?

Peut-on expliquer la différence conceptuelle entre les deux. Lu quelque part que le second crée un nouveau tableau, en détruisant toutes les références à la matrice existante et de la .longueur=0 juste de vider le tableau. Mais il ne fonctionne pas dans mon cas

//Declaration 
var arr = new Array();

Ci-dessous est le code de boucle qui s'exécute de nouveau et de nouveau.

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

Mais si je remplace le code par arr =[] à la place de arr.length=0 il fonctionne très bien. Quelqu'un peut-il expliquer ce qui se passe ici.

87voto

Quentin Points 325526

foo = [] affecte une référence à un tableau à une variable, alors que toutes les autres références ne sont pas affectés.

foo.length = 0 supprime tout ce qui dans la matrice, ce qui n'est frappé d'autres références.

Lu quelque part que le second crée un nouveau tableau, en détruisant toutes les références à la matrice existante

C'est à l'envers. Il crée un nouveau tableau et ne pas détruire d'autres références.

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

donne:

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

2voto

Matt Points 38395

La différence ici, c'est le mieux démontré dans l'exemple suivant:

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

De qui une démonstration en direct peut être vu ici: http://www.jsfiddle.net/8Yn7e/

Lorsque vous définissez une variable qui pointe vers un tableau existant pour pointer vers un nouveau tableau, tout ce que vous faites est de briser le lien de la variable a pour que le tableau d'origine.

Lorsque vous utilisez array.length = 0 (et d'autres méthodes comme l' array.splice(0, array.length) par exemple), vous êtes en fait de vider le tableau d'origine.

-1voto

Denilson Sá Points 6953

Êtes-vous sûr que cela fonctionne vraiment?

J'ai fait une petite expérience ici, et essayer "d'ajouter" un tableau avec une chaîne a abouti à une chaîne.

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

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

(testé dans Opera 11)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X