Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 08.10.2011, 16:10
Новичок на форуме
Отправить личное сообщение для Curious Посмотреть профиль Найти все сообщения от Curious
 
Регистрация: 02.08.2011
Сообщений: 6

Вопрос по теории.
Почему происходит данная вещь:
var ar1 = ar2 = [];
console.log(ar1);
console.log(ar2);

ar1.push(3);
console.log(ar1);
console.log(ar2);

var ar1 = ar2 = 2;
console.log(ar1);
console.log(ar2);

ar1 = 3;
console.log(ar1);
console.log(ar2);


Результат:
[]
[]
[3]
[3]

2
2
3
2


Т.е. если мы создаем два массива, они создаются по ссылке. А переменные создаются по значению.
Ответить с цитированием
  #2 (permalink)  
Старый 08.10.2011, 16:12
Новичок на форуме
Отправить личное сообщение для Kolyaj Посмотреть профиль Найти все сообщения от Kolyaj
 
Регистрация: 19.02.2008
Сообщений: 9,177

А где вы создаёте два массива? Массив один, две переменные ссылаются на него.
Ответить с цитированием
  #3 (permalink)  
Старый 08.10.2011, 16:26
Новичок на форуме
Отправить личное сообщение для Curious Посмотреть профиль Найти все сообщения от Curious
 
Регистрация: 02.08.2011
Сообщений: 6

По аналогии, можно сказать, что во втором случае две переменные ссылаются на одно число.
Ответить с цитированием
  #4 (permalink)  
Старый 08.10.2011, 17:10
Аватар для systemiv
Профессор
Отправить личное сообщение для systemiv Посмотреть профиль Найти все сообщения от systemiv
 
Регистрация: 19.08.2011
Сообщений: 186

Массивы, функции, объекты типа Date и RegExp - это всё объекты, и они работают через ссылку

Последний раз редактировалось systemiv, 08.10.2011 в 17:24.
Ответить с цитированием
  #5 (permalink)  
Старый 08.10.2011, 17:38
Новичок на форуме
Отправить личное сообщение для Curious Посмотреть профиль Найти все сообщения от Curious
 
Регистрация: 02.08.2011
Сообщений: 6

Сообщение от systemiv Посмотреть сообщение
Массивы, функции, объекты типа Date и RegExp - это всё объекты, и они работают через ссылку
А как же:
"Javascript - объектный язык. В нем все является объектами. Строки, числа, функции и массивы - все это объекты со своими методами и свойствами."

Числа, строки, ...- они тоже объекты, но работают по значению?
Ответить с цитированием
  #6 (permalink)  
Старый 08.10.2011, 18:53
Новичок на форуме
Отправить личное сообщение для Kolyaj Посмотреть профиль Найти все сообщения от Kolyaj
 
Регистрация: 19.02.2008
Сообщений: 9,177

Сообщение от Curious
Javascript - объектный язык. В нем все является объектами.
В нём не всё является объектами.
Ответить с цитированием
  #7 (permalink)  
Старый 08.10.2011, 23:58
Аватар для systemiv
Профессор
Отправить личное сообщение для systemiv Посмотреть профиль Найти все сообщения от systemiv
 
Регистрация: 19.08.2011
Сообщений: 186

Сообщение от Kolyaj
В нём не всё является объектами.
new Number(9);
new String('This Object');
Любой тип данных может быть объектом.
Ответить с цитированием
  #8 (permalink)  
Старый 09.10.2011, 00:40
Аватар для B@rmaley.e><e
⊞ Развернуть
Отправить личное сообщение для B@rmaley.e><e Посмотреть профиль Найти все сообщения от B@rmaley.e><e
 
Регистрация: 11.01.2010
Сообщений: 1,810

Сообщение от systemiv
Любой тип данных может быть объектом.
1. Из того, что он может им быть, не следует, что он им всегда является.
2. Сделайте мне из null'а объект.

function isObject(el) {
  el.someTestingProperty = arguments;
  return el.someTestingProperty == arguments
}

alert([isObject(5), isObject({}), isObject(new Number(5))])


Сообщение от Curious
Числа, строки, ...- они тоже объекты, но работают по значению?
Нет. Они — примитивы.

И вообще, я бы советовал понимать всё происходящее так:
Нет никаких передач по ссылке. Есть только передача по значению. Но объектов как значений не существует, есть только ссылки на объекты. И вот именно они (ссылки, а не объекты) передаются по значению.

Последний раз редактировалось B@rmaley.e><e, 09.10.2011 в 00:44.
Ответить с цитированием
  #9 (permalink)  
Старый 09.10.2011, 01:26
Особый гость
Посмотреть профиль Найти все сообщения от monolithed
 
Регистрация: 02.04.2010
Сообщений: 4,260

Сообщение от B@rmaley.e><e
Из того, что он может им быть, не следует, что он им всегда является
Позволю себе дополнить, что:
Объект в ECMAScript — это неупорядоченное множество пар ключ-значение и определяются только типом Object

Сообщение от ECMAScript
Объект - элемент типа Object. Представляет собой неупорядоченный набор свойств, каждое из которых содержит элементарное значение, объект или функцию. Функция, хранимая в свойстве объекта, называется методом.
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
вопрос про возможности JS для рисования и анимации macdack Библиотеки/Тулкиты/Фреймворки 3 15.07.2011 00:13
Я как ответить на вопрос - есть ли жизнь на других планетах? TicTac Оффтопик 5 28.04.2011 04:29
Вопрос авторизации. 0931454574 Серверные языки и технологии 8 12.04.2011 11:09
Вопрос по учебнику Invis1ble Сайт Javascript.ru 12 21.03.2011 20:06
Теоретический вопрос. gods33 (X)HTML/CSS 10 16.12.2010 23:49