2013-05-09 2 views
0

Я читаю исходный код jQuery. В зависимости от jQuery.mergeПочему jQuery.merge задает длину возвращаемого значения вручную?

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

Есть две вещи, которые я не могу понять:

  1. Почему он проверил тип second.length, но не проверяют тип first.length?
  2. Поскольку длина массива увеличивается автоматически, почему нам нужно установить длину вручную?

спасибо.

ответ

0

Javascript не имеет и не поддерживает Ассоциативные массивы. Однако ... Все массивы в Javascript являются объектами, а синтаксис объекта Javascript дает базовую эмуляцию ассоциативного массива.

Так что, если вы должны были бежать:

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

Таким образом они устанавливают длину, чтобы позволить нам, чтобы получить длину, что мы ожидаем, что

+0

Я попытался объединить массив в ассоциативном массив, но длина результата равна длине массива. Кроме того, я не думаю, что Merge может обрабатывать ассоциативные массивы, потому что есть еще одна функция «продление», предназначенная для выполнения этой работы. – liuyl

Смежные вопросы