Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   alert({ня:3} == {ня:3})//false (https://javascript.ru/forum/misc/24306-alert-%7Bnya-3%7D-%3D%3D-%7Bnya-3%7D-false.html)

Livaanderiamarum 25.12.2011 19:08

alert({ня:3} == {ня:3})//false
 
alert({ня:3} == {ня:3})


оператор сравнивания с приведением типов 2 идентичных(равных) объекта (но разных) считает не равными? Почему так сделали и зачем они не исправляют такое упущение в языке? Возможно это не упущение и сделано намеренно для чего-то, тогда для чего?

Livaanderiamarum 25.12.2011 19:11

я конечно могу сравнить идентичность обьектов перебрав их ключи и параметры и сравнить. но на кой черт тогда нужен оператор сравнивания? может он не умеет работать с не примитивными значениями? я понимаю злость и ненависть заступников оператора сравнивания которые хотят щас меня убить такого тупого, но поймите меня я обычный. человек, новичок в программировании и мне не понятна одна вещь я просто спрашиваю. Не ругайте меня пожалуйста

B@rmaley.e><e 25.12.2011 19:17

А как бы Вы сравнивали такое?
var a = {}, b = {};
a.a = a;
b.a = b;
alert(a == b)
a и b идентичны, но разные.

Как видно, сравнение объектов перебором их структуры может быть затратным.

Livaanderiamarum 25.12.2011 19:22

Цитата:

Сообщение от B@rmaley.e><e (Сообщение 145888)
А как бы Вы сравнивали такое?
var a = {}, b = {};
a.a = a;
b.a = b;
alert(a == b)
a и b идентичны, но разные.

Как видно, сравнение объектов перебором их структуры может быть затратным.

я бы сравнил названия всех ключей. если а этом этапе разницы не обнаружено то, сравнил бы значения ключей.

тут 2 этапа:
1) вначале отыскиваются и сравниваются все примитивные значения, если разница не обнаружена, то.
2) потом сравниваются все остальные ссылки. при том используется не только примитивный метод getValue() а еще и анализ на цикличность ссылок. при том если ссылка ведет на одну и ту же область в памяти то, учитывал бы это как равность. как то так.

а вы?

B@rmaley.e><e 25.12.2011 19:33

Цитата:

Сообщение от Livaanderiamarum
сравнил бы значения ключей.

Ну вот сравните значения ключей для моего примера.

dmitriymar 25.12.2011 19:35

Livaanderiamarum,
вот честно,я абсолютно непониме ... то ли лыжи то ли я....
вы виндовс на js пишите? если нет-то для чего всё это?
для игры под ай? дак это там не понадобится. а если понадобилось-просмотрите ещё раз сегмент успешных игр. для чего разрабатывать то,что не будет пользоваться коммерческим успехом?
для самооценки повышения? самооценкой вы не себя ни семью не накормите.
а так если честно,моё мнение,вы муровод какой решил что буду заниматься вот этой задачей(а о ней вы рассказывали ) ищущий причину чтоб от неё отлынивать.
не зря ведь сказано-кто хочет ищет возможность,кто не хочет ищет причину. моё мнение-вы второй тип.
да и смена учётки чтоб снять минусовую карму-радикальный ход. не думали как это смотрится глазами других?

Livaanderiamarum 25.12.2011 19:36

Цитата:

Сообщение от B@rmaley.e><e (Сообщение 145891)
Ну вот сравните значения ключей для моего примера.

ты прочитал только фразу "Сравнил значения ключей" или весь мой текст? если не весь то прочитай весь.

dmitriymar 25.12.2011 19:39

Цитата:

Сообщение от Livaanderiamarum
1) вначале отыскиваются и сравниваются все примитивные значения, если разница не обнаружена,

var a=5+"";
var b=5;
alert(a);
alert(b);
alert(a==b);
alert(a===b);

и вы хотите сказать что они одинаковые?

Livaanderiamarum 25.12.2011 19:39

Цитата:

Сообщение от dmitriymar (Сообщение 145892)
Livaanderiamarum,
вот честно,я абсолютно непониме ... то ли лыжи то ли я....

я вообще не понял как ваш пост связан с вопросом про недочеты в операторе сравнения?

Livaanderiamarum 25.12.2011 19:41

Цитата:

Сообщение от dmitriymar (Сообщение 145895)
var a=5+"";
var b=5;
alert(a);
alert(b);
alert(a==b);
alert(b==a);

у вас не обьекты сравниваются а строка с числом. это не хэши, про которые мы говорим.


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