Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Почему некоторые операторы возвращают значения, а не ссылки? (https://javascript.ru/forum/misc/30101-pochemu-nekotorye-operatory-vozvrashhayut-znacheniya-ne-ssylki.html)

devote 25.07.2012 16:25

Цитата:

Сообщение от oneguy
По спецификации там должно быть 1.

ты бы ссылку кинул на писульку в спецификации а не вопил бы без аргументов.

oneguy 25.07.2012 16:29

Да, вот ваша писулька :) http://es5.javascript.ru/x11.html#x11.11
Семантика, вычисление LogicalORExpression : LogicalORExpression || LogicalANDExpression, шаг 5.

devote 25.07.2012 16:41

Цитата:

Сообщение от oneguy
Да, вот ваша писулька

что-то я там не нашел ничего того что бы это объясняло.. Условия указанные в скобках там не описаны.

А во вторых скажу сразу что Опера лучше других браузеров поддерживает ECMAScript, советую провести тесты. Хотя тут: http://test262.ecmascript.org/ хотя я и не буду утверждать того что опера права, но и пока четких слов не увижу по вычислению выражений в скобках, я буду нейтрален, и к опере и к другим.

oneguy 25.07.2012 17:06

Цитата:

Сообщение от devote
Условия указанные в скобках там не описаны.

Извините, я вас не совсем понимаю, какие условия и какие скобки вы имеете ввиду?
Цитата:

Сообщение от oneguy
Ну и дура

Извините, вы это не восприняли близко к сердцу? Это была просто шутка, я не хотел сказать, что Опера хуже других браузеров.

oneguy 25.07.2012 17:20

Причина этих разногласий между браузерами в вычислении оператора ||.
Выражение false || foo.bar в Опере возвращает значение Reference с базой foo и именем "bar", в остальных браузерах - функцию foo.bar. Поэтому при вызове результата этого выражения как функции в Опере значение foo передаётся в качестве аргумента this, а в других браузерах - глобальный объект (или undefined в строгом режиме). Та же особенность Оперы проявляется в следующем коде:
var a=1;
(0||a)=2; // во всех браузерах, кроме Оперы что-то типа ReferenceError: invalid assignment left-hand side
alert(a); // в Опере выдаёт 2

devote 25.07.2012 17:28

oneguy,
ясно, поинтересуюсь на эту тему потом.


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