Вход

Просмотр полной версии : Массивы и строковые индексы


FanAizu
06.03.2015, 22:26
Подскажите, пожалуйста, не нашел нигде про такой момент информацию:
в массив можно добавлять свойства, как в объекты, например,
var test = [2, 10, 11];

test.myProp = 'hello';
test.['myProp2'] = 'world';


Тут все понятно. А если я присвою строковый индекс, но он будет числовой строкой, то интерпретатор воспримет его, как индекс массива или сделает свойством, как в объектах?:

test['10'] = 'test';
То есть, когда мы добавляем свойства, как в примере свойства 'myProp' и 'myProp2', то они становятся именно свойствами, не влияя на значение length массива, а что касательно случая со свойством test['10'], станет ли оно индексом массива или свойством, как в объектах и не повлияет на length?
Методом пробы test['10'] работает, как индекс массива и влияет на length, но хотелось бы быть уверенным, может где-то об этом говорится в доках, а то не хочется юзать не зная, что делаешь и что происходит. Спасибо.

Decode
07.03.2015, 01:39
Вот тут про это написано: http://learn.javascript.ru/array#внутреннее-устройство-массива

FanAizu
07.03.2015, 02:37
Вот тут про это написано: http://learn.javascript.ru/array#внутреннее-устройство-массива

не, в том-то и дело, что не написано.

2chan
09.03.2015, 14:30
Так сложно самому попробовать?

var a = []; /* создаём массив */
a[0] = 'Ноль как число', // Ключ 0, число.
a['0'] = 'Ноль как строка'; // Ключ "0", строка.
console.log(a[0], a['0']); // (Firefox) => "Ноль как строка" "Ноль как строка", значение a[0] перезаписалось

Не знаю приводятся числа к строкам, или строки к числам, но разницы между a[10] и a['10'] - нет.

Erolast
09.03.2015, 14:52
А если я присвою строковый индекс, но он будет числовой строкой, то интерпретатор воспримет его, как индекс массива или сделает свойством, как в объектах?
Это одно и то же.
не повлияет на length?
На length ничто не влияет. length равно последнему числовому индексу + 1