2014-01-25 4 views
5

Может ли кто-нибудь помочь объяснить, почему длина возвращается 0? Заранее большое спасибо!Длина массива возвращает 0

var errors = []; 
errors[''] = "Monday Morning slot already taken. Would you like to replace it?"; 
console.log(errors); 
document.write(errors.length); 
+1

Поскольку пустая строка не является числовой индекс. – elclanrs

ответ

7

Потому что это не то, как вы добавляете элемент, поскольку массивы принимают только цифровые клавиши. Вы делаете это так:

errors.push("blah"); /*or*/ errors[0] = "blah"; 

//Now if you check the length: 
errors.length; //1 

Кроме того, если вы используете его как объект, '' не является допустимым именем либо.

* Исправление: Похоже, вы можете использовать "" (пустая строка) в качестве ключа.

14

Только числовые индексы влияют на .length Массив.

Другие именованные свойства разрешены, но они не являются типичным для объекта Array. Используя "", вы создаете нечисловое свойство объекта. Вы можете получить доступ к нему, как это:

errors[""]; 

Но вы не можете получить к нему с обычными методами массива.


Для именованных свойств обычно используется объект Object. В любом случае вы можете получить количество собственных, перечислимых свойств (включая числовые индексы), используя Object.keys().

Object.keys(errors).length; 
+1

О, это действительно работает. –

+0

@Derek 朕 會 功夫: пустая строка? Да, как ни странно, это правильное имя. :-) –

2

Для вашего массива требуется числовой ввод, в настоящее время вы используете пустую строку в качестве индекса, что является недопустимым.

Вы можете указать индекс инициализацию массива с данными элементами, или нажать этот элемент в массив:

// Option 1: Specify index 
var errors = []; 
errors[0] = 'Monday Morning slot already taken. Would you like to replace it?'; 

// Options 2: Initialise the Array with values 
var errors = ['Monday Morning slot already taken. Would you like to replace it?']; 

// Option 3: Push the item to Array 
var errors = []; 
var myString = 'Monday Morning slot already taken. Would you like to replace it?'; 
errors.push(myString); 
Смежные вопросы