2013-05-09 4 views
0

Je lis le code source de jQuery. Dans la fonction de jQuery.mergepourquoi jQuery.merge définit la longueur de la valeur de retour à la main?

merge: function(first, second) { 
    var i = first.length, 
     j = 0; 

    if (typeof second.length === "number") { 
     for (var l = second.length; j < l; j++) { 
      first[ i++ ] = second[ j ]; 
     } 

    } else { 
     while (second[j] !== undefined) { 
      first[ i++ ] = second[ j++ ]; 
     } 
    } 

    first.length = i; 

    return first; 
} 

Il y a deux choses que je ne comprends pas:

  1. Pourquoi est-il vérifié le type de second.length, mais pas vérifier le type de first.length?
  2. Puisque la longueur de Array est augmentée automatiquement, pourquoi avons-nous besoin de régler la longueur à la main?

Merci.

Répondre

0

Javascript n'a pas, et ne supporte pas les Arrays associatifs. Cependant ... Tous les tableaux en Javascript sont des objets et la syntaxe d'objet de Javascript donne une émulation de base d'un tableau associatif.

Donc, si vous deviez exécuter:

x = []; 
x['a'] = 1; 
x['b'] = 2; 
alert(x.length); //alerts 0; 

Alors ils ont mis la longueur pour nous permettre d'obtenir la longueur que nous attendons

+0

J'ai essayé de fusionner un tableau à un tableau Associatif, mais le La longueur du résultat est égale à la longueur du tableau. En outre, je ne pense pas que Merge puisse gérer les tableaux associatifs, car il existe une autre fonction "extend" conçue pour faire ce travail. – liuyl

Questions connexes