Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   ОПЕРАТОР ПРИСВАИВАНИЯ ПОЛУЧАЕТ ЗНАЧЕНИЕ ССЫЛКИ? (https://javascript.ru/forum/misc/23888-operator-prisvaivaniya-poluchaet-znachenie-ssylki.html)

Livanderiaamarum 11.12.2011 00:57

12

Livanderiaamarum 11.12.2011 00:58

12





моё недоумение основано лишь на том что человек достаточно туп чтобы понять что я не написал РОВНО символом = а написал его словом РОВНО. из контекста это можно было понять, что впрочем все адекватные люди поняли это....

Livanderiaamarum 11.12.2011 00:59

12

Livanderiaamarum 11.12.2011 01:08

Цитата:

Сообщение от Magneto (Сообщение 141809)
В твоем случае и во всех случаях в JavaScript оператор "=" - oператор присваивания. Этот оператор присваивает значение правого операнда левому.

А равно это "==" - оператор сравнения на равенство. Этот оператор сравнивает два операнда и возвращает Булев результат.

И "===" - оператор тождества. Этот оператор сравнивает два операнда на равенство и возвращает Булев результат. И значения операндов, и их тип данных должны быть идентичны, чтобы оператор возвратил истину.

Так что тебе все верно сказали, и твои обзывания неуместны.

Дело в том что ровно это = а два ровно это ==, исходя из данного контекста моего повествования, если слушатель конечно не дурачек

B@rmaley.e><e 11.12.2011 01:54

Цитата:

Сообщение от Livanderiaamarum
В чем дело тогда, почему возвращается обьект?

Что? Возвращается ссылка на него.
var a = {};
(a = a).b = 5;
alert(a.b)

Livanderiaamarum 11.12.2011 08:40

var foo = {
  bar: function () {
    alert(this);
  }
};
 
foo.bar(); // Reference, OK => foo
(foo.bar)(); // Reference, OK => foo
 
(foo.bar = foo.bar)(); // Value => global?



в последней строчке скобки (foo.bar = foo.bar) возвращают Значение обьекта, а не ссылку на него. Почему?

nerv_ 11.12.2011 10:25

эт еще кто из нас дурачек :D Какие Reference? У вас идет проверка объекта вызова.
var foo = { bar: function() { alert("this === window: " + (this === window) + "\nthis === foo: " + (this === foo)); } };

foo.bar(); // foo
(foo.bar)(); // foo

(foo.bar = foo.bar)(); // window

B@rmaley.e><e 11.12.2011 11:15

Цитата:

Сообщение от Livanderiaamarum
Значение обьекта, а не ссылку на него. Почему?

Потому что они возвращают ссылку, а не значение объекта.
var foo = {
  bar: function () {
    alert(this);
  }
};

foo.bar.x = "Hello!";

(foo.bar = foo.bar).x = "lalala";

alert(foo.bar.x)

monolithed 11.12.2011 11:40

Livanderiaamarum,

var foo = function() {
     return this;
};

var bar = {
  baz: function () {
    return this;
  }
};

alert([
    foo(), //Window
    foo.prototype.constructor(), //Object 
    bar.baz(), //Object  
    (bar.baz)(), //Object 
    (bar.baz = bar.baz)(), //Window
    (bar.baz = bar.baz()), //Object
     bar.baz  //Object 
].join('\n'));


Рассмотрим подробнее, что происходит с:
(bar.baz = bar.baz)();

В этом случае, согласно спецификации вызывается метод GetValue().
Это значит, что тип Reference заменяется Function и вызов фунции происходит уже в Window, т.к. this будет null

var bar = {
  baz: function () {
    return this;
  }
};

var foo = bar.baz;
alert([
	foo(), //Window
	(some = bar.baz)(), //Window
	(1, bar.baz)() //Window
].join('\n'));

nerv_ 11.12.2011 13:16

Господа, добрый день :)

monolithed, разрешите задать два вопроса:
1.
Цитата:

Сообщение от monolithed
В этом случае, согласно спецификации

Можно ссылку?
2.
Цитата:

Сообщение от monolithed
т.к. this будет null

this будет window. Или я не прав?

Livanderiaamarum, практически цитата из книги:
Операции над элементарными типами производятся по значению, а над ссылочными типами – по ссылке.
Числа и логические величины – это элементарные типы; объекты - ссылочные. Массивы и функции – это специализированные типы объектов. Строки сравниваются по значению.


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