Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Пару нюансов в массивах

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Без описания
Golovastik
Отправлено: 03 Августа, 2010 - 18:22:10
Post Id


Гость


Покинул форум
Сообщений всего: 89
Дата рег-ции: Июль 2010  


Помог: 0 раз(а)




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

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

2)Вот такой вариант у меня в коде встречается.
CODE (text):
скопировать код в буфер обмена
  1.  
  2. function magazin(products){
  3.  


А затем,после этой функции такая строка пишется
CODE (text):
скопировать код в буфер обмена
  1.  
  2. var product = new Array(); //Здесь создается объект конструктора Аррей,верно?
  3. magazin(product);
  4.  


Функция с именем magazin,что превращается в массив магазин,такое разве бывает?
CODE (text):
скопировать код в буфер обмена
  1.  
  2. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
  3. <html><head><title>Тренировка</title>
  4. <link rel="stylesheet" type="text/css" href="trenirovka.css">
  5. <script type="text/javascript" src="jquery.js"></script>
  6. <script type="text/javascript" src="otd_file.js"></script>
  7.  
  8. </head>
  9. <script type='text/javascript'>
  10. var x = new Array(5,7,3,' Петя');
  11. for (var i = 0; i <x.length; i++)
  12. document.write(x[i]+' ');
  13.  
  14. document.write('<br>');
  15. var z = ['красный','синий','голубой'];
  16. for (var i = 0; i <z.length; i++)
  17. document.write(z[i]+' ');
  18. document.write('<br>');
  19.  
  20.  
  21. function magazin(products){
  22. products['рубашки'] = 46;
  23. products['брюки'] = 23;
  24. products['шляпы'] = 14;
  25. products['носки'] = 153;
  26. }
  27.  
  28. //Вывод на экран данных о запасов товаров
  29. function zapastovara(products){
  30. document.write(products['рубашки'], ' рубашек.<br>');
  31. document.write(products['брюки'], '  брюк.<br>');
  32. document.write(products['шляпы'], ' шляп.<br>');
  33. document.write(products['носки'], ' носков.<br>');
  34. }
  35.  
  36. var product = new Array();
  37. magazin(product);
  38. zapastovara(product);
  39.  
  40.  
  41.  
  42. </script>
  43. <body>
  44. </body>
  45. </html>
  46.  

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

Вот здесь:
CODE (text):
скопировать код в буфер обмена
  1.  
  2. function magazin(products){
  3. products['рубашки'] = 46;
  4. products['брюки'] = 23;
  5. products['шляпы'] = 14;
  6. products['носки'] = 153;
  7. }
  8.  


Возьмём одну из строк например эту:
products['рубашки'] = 46;
Получается здесь создаётся массив с нуля и первый элемент массива будет products['рубашки']?
Это ассоциативный массив как на пхп?

Потом, когда мы написали
CODE (text):
скопировать код в буфер обмена
  1.  
  2. var product = new Array();
  3. magazin(product);
  4.  

Мы здесь в параметр products передаём объект product и потом,
и объект продукт как-то получает кол-во элементов и значения их?
 
 Top
Golovastik
Отправлено: 03 Августа, 2010 - 21:56:47
Post Id


Гость


Покинул форум
Сообщений всего: 89
Дата рег-ции: Июль 2010  


Помог: 0 раз(а)




Сколько элементов содержит массив product?
Если он инициализируется внутри функции так:
CODE (text):
скопировать код в буфер обмена
  1.  
  2. products['рубашки'] = 46;
  3. products['брюки'] = 23;
  4. products['шляпы'] = 14;
  5. products['носки'] = 153;
  6.  


Можно ли считать что это равносильно этому:
CODE (text):
скопировать код в буфер обмена
  1.  
  2. product['рубашки'] = 46;
  3. product['брюки'] = 23;
  4. product['шляпы'] = 14;
  5. product['носки'] = 153;
  6.  


И можно ли потом использовать например product['рубашки'] = 22220005444; ???
Переопределять этот массив, именно так product['рубашки'], а не так products['рубашки'] как было в функции инициализировано??

2)Можно ли обращаться по номеру индекса массива, а не по брюки,шапки,носки?
Я имею ввиду так: products[2].
 
 Top
JustUserR
Отправлено: 04 Августа, 2010 - 17:48:14
Post Id



Активный участник


Покинул форум
Сообщений всего: 8715
Дата рег-ции: Июнь 2009  


Помог: 17 раз(а)




Golovastik пишет:
Скажите, если массив создаётся вот так:
var z = ['красный','синий','голубой'];
Переменная z первращается в объект конструктора Array?
в отличи от такого создания
var x = new Array(5,7,3,' Петя');
Несмотря на то что при обычным испоспользовании данных массив в дальнейшем JS-коде между ними не будет разницы и это не является следствием автоматического преобразования - но если рассмотреть аналогичный пример со строками то объекты их инициализации будут представлять собой различные вещи Дело в том что в JS существуют отдельно встроенные типы которые могут иметь переменные и константы исходного кода и представляющие собой статический параметр - и отдельно существуют базовые классы которые сами по себе являются сущностыми типа object и их вычисление происходит динамически во время выполнения JS-скрипта Однако из-за наличия автоматического преобразования типов разницу в некоторых случаях бывает трудно увидеть - напрмер если у вас имеется строка var z="mystring" то при вызове z.constructor для попытки определения ее базового класса - происходит автоматическое преобразование к классу Array которое можно описать неявной конструкцией z=new String(z) С массивами такой ситуации не имеется поскольку new Array(1,2,3) и [1,2,3] синтаксически означают одно и то же и сразу формируют соответствующий объект
Если вы хотите осуществить проверку являются ли два объекта иднетичными или просто система автоматического приведения типа делает их похожими - можно использовать оператор ===


-----
Сделать можно все что угодно - нужно только старание, терпение и хороший поисковик Улыбка
Безлимитный web-хостинг от 15 рублей за 40 МБ дискового пространства - http://ihost[dot]oks71[dot]ru/
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« JavaScript & VBScript »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB