Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Web программирование > JavaScript, Ajax
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 03.08.2010, 19:20   #1
Kapitann
Заблокирован
 
Регистрация: 26.07.2010
Сообщений: 160
По умолчанию Пару нюансов в масиве

Изучаю массивы JavaScript.

1)Скажите, если массив создаётся вот так:
var z = ['красный','синий','голубой'];
Переменная z первращается в объект конструктора Array?
в отличи от такого создания
var x = new Array(5,7,3,' Петя');

2)Вот такой вариант у меня в коде встречается.
Код:
function magazin(products){
А затем,после этой функции такая строка пишется
Код:
var product = new Array(); //Здесь создается объект конструктора Аррей,верно?
magazin(product);
Функция с именем magazin,что превращается в массив магазин,такое разве бывает?
Код:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head><title>Тренировка</title>
<link rel="stylesheet" type="text/css" href="trenirovka.css">
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="otd_file.js"></script>

</head>
<script type='text/javascript'>
var x = new Array(5,7,3,' Петя');
for (var i = 0; i <x.length; i++)
document.write(x[i]+' ');

document.write('<br>');
var z = ['красный','синий','голубой'];
for (var i = 0; i <z.length; i++)
document.write(z[i]+' ');
document.write('<br>');


function magazin(products){
products['рубашки'] = 46;
products['брюки'] = 23;
products['шляпы'] = 14;
products['носки'] = 153;
}

//Вывод на экран данных о запасов товаров
function zapastovara(products){
document.write(products['рубашки'], ' рубашек.<br>');
document.write(products['брюки'], '  брюк.<br>');
document.write(products['шляпы'], ' шляп.<br>');
document.write(products['носки'], ' носков.<br>');
}

var product = new Array();
magazin(product);
zapastovara(product);



</script>
<body>
</body>
</html>
Kapitann вне форума Ответить с цитированием
Старый 03.08.2010, 20:12   #2
Greblin
Меркантильный кю
Участник клуба
 
Аватар для Greblin
 
Регистрация: 02.02.2008
Сообщений: 1,001
По умолчанию

1) Объявления
Код:
var x = ['a', 'b'];
и
Код:
var x = new Array('a', 'b');
эквивалентны, оба создают массив с двумя элементами. Исключение лишь одно - конструкция
Код:
var x = new Array(10);
создаст массив из 10 элементов undefined.
2) В природе нет такого зверя "объект конструктора", есть конструктор объекта, а переменной, стоящей слева от равно присваивается результат его работы, то бишь созданный объект. Функция ни во что не превращается, она принимает в качестве своего аргумента объект и работает с ним
Росли вроде умными, выросли дурнями... (c)А.Васильев

Последний раз редактировалось Greblin; 03.08.2010 в 20:14.
Greblin вне форума Ответить с цитированием
Старый 03.08.2010, 20:28   #3
Kapitann
Заблокирован
 
Регистрация: 26.07.2010
Сообщений: 160
По умолчанию

Код:
var product = new Array();
magazin(product);
zapastovara(product);
Но ведь после строки var product = new Array();
создался пустой объект класса Array?
Как может в функцию magazin передастся пустой массив хранящийся в объекте продукт?
Kapitann вне форума Ответить с цитированием
Старый 03.08.2010, 20:31   #4
Greblin
Меркантильный кю
Участник клуба
 
Аватар для Greblin
 
Регистрация: 02.02.2008
Сообщений: 1,001
По умолчанию

Эээ, а что мешает ему передаться? Ну пустой, ну и ладно
Росли вроде умными, выросли дурнями... (c)А.Васильев
Greblin вне форума Ответить с цитированием
Старый 03.08.2010, 20:42   #5
Kapitann
Заблокирован
 
Регистрация: 26.07.2010
Сообщений: 160
По умолчанию

[codе]
var product = new Array(); //Это объект класса (не конструктора класса, а самого класса)Array,верно? Ведь экземпляр и объект это одно и тоже.
[/code]
После этой строки в части оперативной памяти - куче, создался объект.

Вот здесь:
Код:
function magazin(products){
products['рубашки'] = 46;
products['брюки'] = 23;
products['шляпы'] = 14;
products['носки'] = 153;
}
Возьмём одну из строк например эту:
products['рубашки'] = 46;
Получается здесь создаётся массив с нуля и первый элемент массива будет products['рубашки']?
Это ассоциативный массив как на пхп?

Потом, когда мы написали
Код:
var product = new Array();
magazin(product);
Мы здесь в параметр products передаём объект product и потом,
и объект продукт как-то получает кол-во элементов и значения их?
Kapitann вне форума Ответить с цитированием
Старый 03.08.2010, 21:06   #6
Greblin
Меркантильный кю
Участник клуба
 
Аватар для Greblin
 
Регистрация: 02.02.2008
Сообщений: 1,001
По умолчанию

Не очень понимаю, что Вас смущает. То что глобальная переменная называется product, а локальная products? Или то, что изменения, применённые внутри функции, отразились и снаружи?
Цитата:
Это ассоциативный массив как на пхп?
Да, в js массивы ассоциативные
Росли вроде умными, выросли дурнями... (c)А.Васильев
Greblin вне форума Ответить с цитированием
Старый 03.08.2010, 21:10   #7
Kapitann
Заблокирован
 
Регистрация: 26.07.2010
Сообщений: 160
По умолчанию

Меня смущает как может массив заполнится функцией.
Kapitann вне форума Ответить с цитированием
Старый 03.08.2010, 21:20   #8
Greblin
Меркантильный кю
Участник клуба
 
Аватар для Greblin
 
Регистрация: 02.02.2008
Сообщений: 1,001
По умолчанию

Упрощённо говоря, параметры в js передаются по ссылке. Это значит, что параметр, который используется в функции, представляет собой всего лишь псевдоним реально существующей переменной. Никаких новых переменных не создаётся, все изменения применяются к переданной в качестве параметра переменной

P.S. На самом деле, стратегия передачи параметров в js хитрее. Почитать можно тут
Росли вроде умными, выросли дурнями... (c)А.Васильев
Greblin вне форума Ответить с цитированием
Старый 03.08.2010, 21:31   #9
Kapitann
Заблокирован
 
Регистрация: 26.07.2010
Сообщений: 160
По умолчанию

Код:
var product = new Array();
magazin(product);
То есть объект продукт ссылается на объект класса Аррэй который создалася динамически через нью и лежит в части оперативной памяти - куче?

Объект продукт передаётся в качестве аргумента функции магазин, а потом как появляются элементы со значениями в объекте продукт который является массивом?
Kapitann вне форума Ответить с цитированием
Старый 03.08.2010, 21:39   #10
Greblin
Меркантильный кю
Участник клуба
 
Аватар для Greblin
 
Регистрация: 02.02.2008
Сообщений: 1,001
По умолчанию

Цитата:
Сообщение от Kapitann Посмотреть сообщение
То есть объект продукт ссылается на объект класса Аррэй который создалася динамически через нью и лежит в части оперативной памяти - куче?
Да, именно так. И в этом и состоит ответ на Ваш второй вопрос
Росли вроде умными, выросли дурнями... (c)А.Васильев
Greblin вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
поиск в масиве Apis Общие вопросы C/C++ 2 12.09.2011 05:51
Задачка с перестановкой значений в двумерном масиве sekator Visual C++ 2 28.07.2010 14:33
поиск в масиве Apis Паскаль, Turbo Pascal, PascalABC.NET 1 25.04.2010 23:36
ПОВТОР ЗНАЧЕНИЯ В МАСИВЕ Slavik Microsoft Office Excel 11 27.01.2009 08:13