Объясните, нубу джаваскрипта, поведени массива.
Приветсвую.
Есть простой 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-ий имеет конкретное значение. |
Потому что length не равно количеству элементов в массиве, а всего навсего всегда больше любого числового индекса.
|
В приведенном примере в массиве 4 элемента:
[undefined, undefined, undefined, qNum]. Его длина равна 4. Понятно, что индекс последнего элемента 3. В большой степени интересует почему элементов 4, а не 1. Я ведь добавил только один объект. Видимо это не полноценный ассоциативный массив, который есть в джаве, допустим. |
Потому что length — по определению самый верхний индекс плюс один.
var a = []; a[3] = "foo"; alert(a.length); var c = 0; for (var i in a) c++; alert(c); |
Ок. Спасибо за объяснение.
Я подготавливал массив, что б потом его с помощью DWR кинуть в джава класс. В классе была коллекция, ассоциированная с этим массивом и она говорила, что у нее 4 элемента. При обращениии к 0, 1 и 2 элементу бросалася NullPointerException. Было 2 выхода: почистить массив от undefined элементов до передачи по аджаксу или уже в рантайме в джаве удалить все элементы, что null. Сделал первым способом, что б объем передаваемой информации был меньше(как мне кажется). |
Цитата:
Цитата:
Цитата:
alert([1,, , , , , ].length) |
Вообще такие моменты описаны в каждой книге.
Цитата:
|
Не читал, к сожалению, книжек по скрипту. Просто не хватает времени. Вот теперь понимаю, что нужно найти его и хотя бы бегло ознакомиться с азами.
|
B~Vladi,
я книг по JS, конечно, не читал. Но вот поискал статьи в интернетах про массивы в JS: в основном ложь и провокация, есть достойные, но не исчерпывающие. В итоге взялся за написание своих. Когда-нибудь допишу :) |
Цитата:
как же это получилось? Там же должен быть 7. |
Часовой пояс GMT +3, время: 23:23. |