Javascript-форум (https://javascript.ru/forum/)
-   Учебные материалы (https://javascript.ru/forum/study/)
-   -   Javascript quiz - поразмять мозг (https://javascript.ru/forum/study/21112-javascript-quiz-porazmyat-mozg.html)

ваый 29.08.2011 16:44

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...
Заставляет напрячься :)

Kolyaj 29.08.2011 16:54

Вот на русском есть http://anotherfelix.com/jsquiz/jsquiz.html

melky 29.08.2011 17:49

Kolyaj, почему так? несколько вопросов, которые ломают голову. ответьте пожалуйста :)

var a = [1, 2], b = [1, 2];

a['3'] = 3;   
b['3b'] = 3;  // каг бэ в "b" добавляем

console.log(a.length + ' ' + b.length);

B@rmaley.e><e 29.08.2011 17:59

Цитата:

Сообщение от melky
каг бэ в "b" добавляем

length никак не связано с количеством "элементов" (которые на самом деле всего-лишь свойства объекта). length, по определению, число, большее любого индекса, приводимого к числу.
var a = [];
a['9999'] = 5;
alert(a.length)

Snipe 29.08.2011 18:01

Цитата:

Сообщение от melky (Сообщение 123315)
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'] к числу не приводится, видимо, поэтому элемент не присваивается...

B@rmaley.e><e 29.08.2011 18:04

Snipe,
var a = [];
a['3b'] = 'Hi!';
alert(a['3b'])

melky 29.08.2011 18:12

Цитата:

Сообщение от Snipe (Сообщение 123318)
a['3'] приводится к числу и заполняет четвертый элемент, начиная с нуля.

опечатка?

мне было в новинку это приведение к числу. я думал : "как будет строкой, так и останется".. но тогда будет путаница между свойством и элементом массива.

ясно, спасибо за ответы :)

вот вывод консоли, на всякий
Код:

> a = [1,2]
> a[ '3' ] = 3;
> a;
[1, 2, undefined, 3]


Цитата:

Сообщение от Snipe (Сообщение 123318)
b['3b'] к числу не приводится, видимо, поэтому элемент не присваивается...

это уже считается как свойство объекта. как ассоциативный массив, видимо

Snipe 29.08.2011 18:17

Цитата:

Сообщение от melky (Сообщение 123321)
опечатка?

нет
a[0], a[1], a[2], a[3] - 4 элемента
Длина массива считается по последнему элементу.

Kolyaj 29.08.2011 18:20

Подробней http://alljs.ru/articles/array/whatis

Цитата:

Сообщение от melky
мне было в новинку это приведение к числу. я думал : "как будет строкой, так и останется".. но тогда будет путаница между свойством и элементом массива.

Массив -- это объект, ключ объекта всегда строка, так что приведения к числу нет. Наоборот, в случае a[2] 2 приводится к строке.
Подробней http://javascript.ru/ecma/part15#a-15.4

Kolyaj 29.08.2011 18:21

Цитата:

Сообщение от Snipe
Длина массива считается по последнему элементу.

var arr = new Array(10);
arr.length == 10, но ни одного элемента в массиве нет.


Часовой пояс GMT +3, время: 17:44.