Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 24.06.2010, 11:55
Новичок на форуме
Отправить личное сообщение для Alive Substance Посмотреть профиль Найти все сообщения от Alive Substance
 
Регистрация: 16.09.2009
Сообщений: 8

Объясните, нубу джаваскрипта, поведени массива.
Приветсвую.

Есть простой html:
<html>
<head>
    <script src="js/temp2.js" type="text/javascript"></script>
</head>
<body>
<input type="button" value="kick me" onclick="kick()" >
</body>
</html>


temp2.js:
function kick()
{
    qNumber = 3;

    var qNum = {
        number: qNumber,
        ready: true
    }

    var array = new Array();
    array[qNumber] = qNum;
    var size = array.length;
}


Почему значение переменной size равно 4?
То есть 0,1 и 2-ой элементы массива undefined и только 3-ий имеет конкретное значение.
Ответить с цитированием
  #2 (permalink)  
Старый 24.06.2010, 12:00
Новичок на форуме
Отправить личное сообщение для Kolyaj Посмотреть профиль Найти все сообщения от Kolyaj
 
Регистрация: 19.02.2008
Сообщений: 9,177

Потому что length не равно количеству элементов в массиве, а всего навсего всегда больше любого числового индекса.
Ответить с цитированием
  #3 (permalink)  
Старый 24.06.2010, 14:00
Новичок на форуме
Отправить личное сообщение для Alive Substance Посмотреть профиль Найти все сообщения от Alive Substance
 
Регистрация: 16.09.2009
Сообщений: 8

В приведенном примере в массиве 4 элемента:
[undefined, undefined, undefined, qNum].

Его длина равна 4. Понятно, что индекс последнего элемента 3.
В большой степени интересует почему элементов 4, а не 1. Я ведь добавил только один объект.
Видимо это не полноценный ассоциативный массив, который есть в джаве, допустим.
Ответить с цитированием
  #4 (permalink)  
Старый 24.06.2010, 14:16
Аватар для subzey
Пионэр
Отправить личное сообщение для subzey Посмотреть профиль Найти все сообщения от subzey
 
Регистрация: 16.11.2009
Сообщений: 1,322

Потому что length — по определению самый верхний индекс плюс один.

var a = [];
a[3] = "foo";
alert(a.length);
var c = 0;
for (var i in a) c++;
alert(c);
Ответить с цитированием
  #5 (permalink)  
Старый 24.06.2010, 14:33
Новичок на форуме
Отправить личное сообщение для Alive Substance Посмотреть профиль Найти все сообщения от Alive Substance
 
Регистрация: 16.09.2009
Сообщений: 8

Ок. Спасибо за объяснение.
Я подготавливал массив, что б потом его с помощью DWR кинуть в джава класс. В классе была коллекция, ассоциированная с этим массивом и она говорила, что у нее 4 элемента. При обращениии к 0, 1 и 2 элементу бросалася NullPointerException. Было 2 выхода: почистить массив от undefined элементов до передачи по аджаксу или уже в рантайме в джаве удалить все элементы, что null. Сделал первым способом, что б объем передаваемой информации был меньше(как мне кажется).
Ответить с цитированием
  #6 (permalink)  
Старый 24.06.2010, 14:38
Новичок на форуме
Отправить личное сообщение для Kolyaj Посмотреть профиль Найти все сообщения от Kolyaj
 
Регистрация: 19.02.2008
Сообщений: 9,177

Сообщение от Alive Substance
В приведенном примере в массиве 4 элемента:
[undefined, undefined, undefined, qNum].
В приведённом примере в массиве только один элемент, под номером 3.

Сообщение от Alive Substance
Видимо это не полноценный ассоциативный массив, который есть в джаве, допустим.
В JS вообще нет полноценных массивов, а ассоциативных и подавно.

Сообщение от subzey
Потому что length — по определению самый верхний индекс плюс один.
Нет.
alert([1,, , , , , ].length)
Ответить с цитированием
  #7 (permalink)  
Старый 24.06.2010, 14:45
Аватар для B~Vladi
Модератор Всея Форума
Отправить личное сообщение для B~Vladi Посмотреть профиль Найти все сообщения от B~Vladi
 
Регистрация: 14.05.2009
Сообщений: 4,021

Вообще такие моменты описаны в каждой книге.
Сообщение от Kolyaj
В JS вообще нет полноценных массивов
А чего в них не хватает?
Ответить с цитированием
  #8 (permalink)  
Старый 24.06.2010, 14:47
Новичок на форуме
Отправить личное сообщение для Alive Substance Посмотреть профиль Найти все сообщения от Alive Substance
 
Регистрация: 16.09.2009
Сообщений: 8

Не читал, к сожалению, книжек по скрипту. Просто не хватает времени. Вот теперь понимаю, что нужно найти его и хотя бы бегло ознакомиться с азами.
Ответить с цитированием
  #9 (permalink)  
Старый 24.06.2010, 14:48
Новичок на форуме
Отправить личное сообщение для Kolyaj Посмотреть профиль Найти все сообщения от Kolyaj
 
Регистрация: 19.02.2008
Сообщений: 9,177

B~Vladi,
я книг по JS, конечно, не читал. Но вот поискал статьи в интернетах про массивы в JS: в основном ложь и провокация, есть достойные, но не исчерпывающие. В итоге взялся за написание своих. Когда-нибудь допишу
Ответить с цитированием
  #10 (permalink)  
Старый 24.06.2010, 15:04
Аватар для subzey
Пионэр
Отправить личное сообщение для subzey Посмотреть профиль Найти все сообщения от subzey
 
Регистрация: 16.11.2009
Сообщений: 1,322

Сообщение от http://javascript.ru/Array/length
Длина массива: число, на единицу превосходящее максимальный индекс массива
Kolyaj,
как же это получилось? Там же должен быть 7.
Ответить с цитированием
Ответ


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

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