Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Вопрос по теории. (https://javascript.ru/forum/misc/22163-vopros-po-teorii.html)

Curious 08.10.2011 16:10

Вопрос по теории.
 
Почему происходит данная вещь:
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


Т.е. если мы создаем два массива, они создаются по ссылке. А переменные создаются по значению.

Kolyaj 08.10.2011 16:12

А где вы создаёте два массива? Массив один, две переменные ссылаются на него.

Curious 08.10.2011 16:26

По аналогии, можно сказать, что во втором случае две переменные ссылаются на одно число.

systemiv 08.10.2011 17:10

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

Curious 08.10.2011 17:38

Цитата:

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

А как же:
"Javascript - объектный язык. В нем все является объектами. Строки, числа, функции и массивы - все это объекты со своими методами и свойствами."

Числа, строки, ...- они тоже объекты, но работают по значению?

Kolyaj 08.10.2011 18:53

Цитата:

Сообщение от Curious
Javascript - объектный язык. В нем все является объектами.

В нём не всё является объектами.

systemiv 08.10.2011 23:58

Цитата:

Сообщение от Kolyaj
В нём не всё является объектами.

new Number(9);
new String('This Object');
Любой тип данных может быть объектом.

B@rmaley.e><e 09.10.2011 00:40

Цитата:

Сообщение от systemiv
Любой тип данных может быть объектом.

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

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

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


Цитата:

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

Нет. Они — примитивы.

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

monolithed 09.10.2011 01:26

Цитата:

Сообщение от B@rmaley.e><e
Из того, что он может им быть, не следует, что он им всегда является

Позволю себе дополнить, что:
Объект в ECMAScript — это неупорядоченное множество пар ключ-значение и определяются только типом Object

Цитата:

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



Часовой пояс GMT +3, время: 09:03.