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)

trikadin 25.12.2011 23:51

Цитата:

Сообщение от Livaanderiamarum
не, завтра выйдет(, я соскучился по вам)

И правда, завтра...

Livaanderiamarum 25.12.2011 23:55

Цитата:

Сообщение от trikadin (Сообщение 145997)
И правда, завтра...

через 300 секунд, не)?

monolithed 26.12.2011 00:08

Livaanderiamarum, pазве не понятно что такое прототипы и что значения могут содержать не только строки, но и другие объекты?

var fn = function() {
    return 1;
};

var obj = {a : fn};

alert(JSON.stringify(obj));


var some = 1;

var fn = function() {
    return some;
};

var obj = {a : fn};

alert(obj.toSource());


var foo;

var some = "string1";

var bar = {
    a : some
}

var fn = function() {
	var some = "string2";

	foo = {
		a : some
	}
}();

alert([foo.a, bar.a]);

Livaanderiamarum 26.12.2011 00:12

Цитата:

Сообщение от monolithed (Сообщение 146003)
Разве не понятно что такое прототипы и что значения могут содержать не только строки, но и другие объекты?

что бы прототипы, расскажите по подробней)?

trikadin 26.12.2011 00:16

Цитата:

Сообщение от Livaanderiamarum
что бы прототипы, расскажите по подробней)?

RTFM.

Livaanderiamarum 26.12.2011 00:32

Цитата:

Сообщение от trikadin (Сообщение 146006)
RTFM.

аа, вы про группировку общих свойств и методов в ООП чтобы не занимать память))? тогда понятно)

Gvozd 26.12.2011 01:25

Цитата:

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

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

Все-таки как ваш алгоритм от работает на примере?
var a = {};//адрес - 0x0008
var b = {};//адрес - 0x00A8
a.a = a;
b.a = b;
alert(a == b)

1)Сравниваем объекты a(0x0008) и b(0x00A8)
Названия ключей одинаковые, примитивных значений нету
2) Сравниваем между собой их единственное свойство
a.a(0x00A8) и b.a(0x0008)
Это объекты находящиеся по разным адресам(а значит предположительно разные)
НАзванияю ключей в этих объектах одинаковые. примитивных значений нету
3)Сравниваем между собой единственное свойство у объектов a.a(0x00A8) и b.a(0x0008) - a.a.a(0x0008) и b.a.a(0x00A8)
Это ссылки на объекты находящиеся по разным адресам(а значит надо продолжить сравнивать)
Ну у каждого из них обнаружено зацикливание(адрес совпадает с первоначальным для объектов)
Поэтому вглубь мы не идем
И что дальше?
равны текущие свойства или нет? Если да, то почему?

Livaanderiamarum 26.12.2011 19:35

Цитата:

Сообщение от Gvozd (Сообщение 146037)
Все-таки как ваш алгоритм от работает на примере?
var a = {};//адрес - 0x0008
var b = {};//адрес - 0x00A8
a.a = a;
b.a = b;
alert(a == b)

равны текущие свойства или нет? Если да, то почему?

не равны потому что разная память. не продолжаем потому что обнаружено кольцо.

devote 27.12.2011 08:31

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

{nya:1} !== {nya:1}
у них разные участки памяти, и объекты всегда сравниваются по ссылке в памяти, потому и разные
"test" === "test"
у них разные участки памяти, но строка сравнивается всегда с содержимым, тоже самое и числа, потому и идентичны

Livaanderiamarum 27.12.2011 13:22

Цитата:

Сообщение от devote (Сообщение 146370)
что тут не ясного, нужно смотреть в первую очередь не на то что написано в листинге кода, а на более низкоуровневую часть.

{nya:1} !== {nya:1}
у них разные участки памяти, и объекты всегда сравниваются по ссылке в памяти, потому и разные
"test" === "test"
у них разные участки памяти, но строка сравнивается всегда с содержимым, тоже самое и числа, потому и идентичны

ахахххахахахб тред не читай, сразу отвечай)


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