29.08.2011, 16:44
|
Профессор
|
|
Регистрация: 29.06.2011
Сообщений: 445
|
|
Javascript quiz - поразмять мозг
Наткнулся на любопытный тестик. Как сказано в предисловии проверяются следующие знания:
Цитата:
|
Quiz mainly focuses on knowledge of scoping, function expressions (and how they differ from function declarations), references, process of variable and function declaration, order of evaluation, and a couple more things...
|
Заставляет напрячься
|
|
29.08.2011, 16:54
|
Новичок на форуме
|
|
Регистрация: 19.02.2008
Сообщений: 9,177
|
|
|
|
29.08.2011, 17:49
|
sinistral
|
|
Регистрация: 28.03.2011
Сообщений: 5,418
|
|
Kolyaj, почему так? несколько вопросов, которые ломают голову. ответьте пожалуйста
var a = [1, 2], b = [1, 2];
a['3'] = 3;
b['3b'] = 3; // каг бэ в "b" добавляем
console.log(a.length + ' ' + b.length);
Последний раз редактировалось melky, 29.08.2011 в 17:52.
|
|
29.08.2011, 17:59
|
|
⊞ Развернуть
|
|
Регистрация: 11.01.2010
Сообщений: 1,810
|
|
Сообщение от melky
|
каг бэ в "b" добавляем
|
length никак не связано с количеством "элементов" (которые на самом деле всего-лишь свойства объекта). length, по определению, число, большее любого индекса, приводимого к числу.
var a = [];
a['9999'] = 5;
alert(a.length)
|
|
29.08.2011, 18:01
|
|
Профессор
|
|
Регистрация: 06.05.2008
Сообщений: 765
|
|
Сообщение от melky
|
Kolyaj, почему так? несколько вопросов, которые ломают голову. ответьте пожалуйста
var a = [1, 2], b = [1, 2];
a['3'] = 3;
b['3b'] = 3; // каг бэ в "b" добавляем
console.log(a.length + ' ' + b.length);
|
a['3'] приводится к числу и заполняет четвертый элемент, начиная с нуля.
b['3b'] к числу не приводится, видимо, поэтому элемент не присваивается...
|
|
29.08.2011, 18:04
|
|
⊞ Развернуть
|
|
Регистрация: 11.01.2010
Сообщений: 1,810
|
|
Snipe,
var a = [];
a['3b'] = 'Hi!';
alert(a['3b'])
|
|
29.08.2011, 18:12
|
sinistral
|
|
Регистрация: 28.03.2011
Сообщений: 5,418
|
|
Сообщение от Snipe
|
a['3'] приводится к числу и заполняет четвертый элемент, начиная с нуля.
|
опечатка?
мне было в новинку это приведение к числу. я думал : "как будет строкой, так и останется".. но тогда будет путаница между свойством и элементом массива.
ясно, спасибо за ответы
вот вывод консоли, на всякий
Код:
|
> a = [1,2]
> a[ '3' ] = 3;
> a;
[1, 2, undefined, 3] |
Сообщение от Snipe
|
b['3b'] к числу не приводится, видимо, поэтому элемент не присваивается...
|
это уже считается как свойство объекта. как ассоциативный массив, видимо
|
|
29.08.2011, 18:17
|
|
Профессор
|
|
Регистрация: 06.05.2008
Сообщений: 765
|
|
Сообщение от melky
|
опечатка?
|
нет
a[0], a[1], a[2], a[3] - 4 элемента
Длина массива считается по последнему элементу.
|
|
29.08.2011, 18:20
|
Новичок на форуме
|
|
Регистрация: 19.02.2008
Сообщений: 9,177
|
|
Подробней http://alljs.ru/articles/array/whatis
Сообщение от melky
|
мне было в новинку это приведение к числу. я думал : "как будет строкой, так и останется".. но тогда будет путаница между свойством и элементом массива.
|
Массив -- это объект, ключ объекта всегда строка, так что приведения к числу нет. Наоборот, в случае a[2] 2 приводится к строке.
Подробней http://javascript.ru/ecma/part15#a-15.4
|
|
29.08.2011, 18:21
|
Новичок на форуме
|
|
Регистрация: 19.02.2008
Сообщений: 9,177
|
|
Сообщение от Snipe
|
Длина массива считается по последнему элементу.
|
var arr = new Array(10);
arr.length == 10, но ни одного элемента в массиве нет.
|
|
|
|