Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 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...
Заставляет напрячься
Ответить с цитированием
  #2 (permalink)  
Старый 29.08.2011, 16:54
Новичок на форуме
Отправить личное сообщение для Kolyaj Посмотреть профиль Найти все сообщения от Kolyaj
 
Регистрация: 19.02.2008
Сообщений: 9,177

Вот на русском есть http://anotherfelix.com/jsquiz/jsquiz.html
Ответить с цитированием
  #3 (permalink)  
Старый 29.08.2011, 17:49
sinistral
Посмотреть профиль Найти все сообщения от melky
 
Регистрация: 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.
Ответить с цитированием
  #4 (permalink)  
Старый 29.08.2011, 17:59
Аватар для B@rmaley.e><e
⊞ Развернуть
Отправить личное сообщение для B@rmaley.e><e Посмотреть профиль Найти все сообщения от B@rmaley.e><e
 
Регистрация: 11.01.2010
Сообщений: 1,810

Сообщение от melky
каг бэ в "b" добавляем
length никак не связано с количеством "элементов" (которые на самом деле всего-лишь свойства объекта). length, по определению, число, большее любого индекса, приводимого к числу.
var a = [];
a['9999'] = 5;
alert(a.length)
Ответить с цитированием
  #5 (permalink)  
Старый 29.08.2011, 18:01
Аватар для Snipe
Профессор
Отправить личное сообщение для Snipe Посмотреть профиль Найти все сообщения от Snipe
 
Регистрация: 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'] к числу не приводится, видимо, поэтому элемент не присваивается...
Ответить с цитированием
  #6 (permalink)  
Старый 29.08.2011, 18:04
Аватар для B@rmaley.e><e
⊞ Развернуть
Отправить личное сообщение для B@rmaley.e><e Посмотреть профиль Найти все сообщения от B@rmaley.e><e
 
Регистрация: 11.01.2010
Сообщений: 1,810

Snipe,
var a = [];
a['3b'] = 'Hi!';
alert(a['3b'])
Ответить с цитированием
  #7 (permalink)  
Старый 29.08.2011, 18:12
sinistral
Посмотреть профиль Найти все сообщения от melky
 
Регистрация: 28.03.2011
Сообщений: 5,418

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

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

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

вот вывод консоли, на всякий
Код:
> a = [1,2]
> a[ '3' ] = 3;
> a;
[1, 2, undefined, 3]

Сообщение от Snipe Посмотреть сообщение
b['3b'] к числу не приводится, видимо, поэтому элемент не присваивается...
это уже считается как свойство объекта. как ассоциативный массив, видимо
Ответить с цитированием
  #8 (permalink)  
Старый 29.08.2011, 18:17
Аватар для Snipe
Профессор
Отправить личное сообщение для Snipe Посмотреть профиль Найти все сообщения от Snipe
 
Регистрация: 06.05.2008
Сообщений: 765

Сообщение от melky Посмотреть сообщение
опечатка?
нет
a[0], a[1], a[2], a[3] - 4 элемента
Длина массива считается по последнему элементу.
Ответить с цитированием
  #9 (permalink)  
Старый 29.08.2011, 18:20
Новичок на форуме
Отправить личное сообщение для Kolyaj Посмотреть профиль Найти все сообщения от Kolyaj
 
Регистрация: 19.02.2008
Сообщений: 9,177

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

Сообщение от melky
мне было в новинку это приведение к числу. я думал : "как будет строкой, так и останется".. но тогда будет путаница между свойством и элементом массива.
Массив -- это объект, ключ объекта всегда строка, так что приведения к числу нет. Наоборот, в случае a[2] 2 приводится к строке.
Подробней http://javascript.ru/ecma/part15#a-15.4
Ответить с цитированием
  #10 (permalink)  
Старый 29.08.2011, 18:21
Новичок на форуме
Отправить личное сообщение для Kolyaj Посмотреть профиль Найти все сообщения от Kolyaj
 
Регистрация: 19.02.2008
Сообщений: 9,177

Сообщение от Snipe
Длина массива считается по последнему элементу.
var arr = new Array(10);
arr.length == 10, но ни одного элемента в массиве нет.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Первый Moscow JavaScript Meetup korenyushkin Общие вопросы Javascript 0 26.07.2011 15:23
javascript вставки в vrml сцены. Передать событие из броузера Proletariy Javascript под браузер 0 10.05.2011 12:26
Последние книги по JavaScript! monolithed Учебные материалы 7 26.10.2010 19:40
Выдвет ошибку JavaScript Ромио Opera, Safari и др. 4 21.10.2010 20:34
Javascript quiz · Perfection kills Octane Оффтопик 49 16.02.2010 12:46