Четыре отдельных вызова console.log () выдают именно то, что я ожидаю, за исключением первого. Почему говорится, что длина равна 0?
Только численные свойства учитываются для length
. 'ko'
не является числовым.
Из спецификации :
Свойство length
этого объекта Array является свойством данных, значение которого всегда численно больше, чем имя каждого удаляемого свойства, имя которого является массивом index .
Где Индекс массива определяется как:
Имя свойства P (в виде значения String) является индексом массива тогда и только тогда, когда ToString (ToUint32 ( P )) равно P и ToUint32 ( P ) не равны 2 32 -1.
Следовательно, ko
не является индексом массива.
Тот, что в итераторе $ .each () ничего не выводит. Почему нет?
Поскольку jQuery распознает аргументы как массив и перебирает его значения, вероятно, следующим образом:
for(var i = 0; i < arg.length; i++)
Вы уже заметили, что translations.length
- это 0
.
Вы делаете ошибку, чтобы использовать массив в качестве ассоциативного массива. Вместо этого используйте объект :
var translations = {};
translations['ko'] = {};
Причиной, по которой вы можете назначать нечисловые свойства массивам, является просто тот факт, что массивы также являются объектами. Но это не значит, что вы должны использовать их как таковые. Специальные методы массива не применяются к нечисловым свойствам.
Я бы посоветовал вам прочитать больше о массивах в MDN JavaScript Guide .