Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   ключ объекта ссылка на объект (https://javascript.ru/forum/misc/52194-klyuch-obekta-ssylka-na-obekt.html)

Brainsss 07.12.2014 21:40

ключ объекта ссылка на объект
 
var start = {};
var obj = {};
var a = start;
obj.a = 5;
for(var key in obj){
	console.log(key === start);
}

Всем привет. Подскажите как правильно сделать что бы получилось true? Нужно передать ключом объекта объект, и получить в итоге при сравнении ключа и объекта истину. Помогите пожалуйста.

devote 07.12.2014 21:48

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

Aetae 07.12.2014 21:49

Хз, что тебе надо. Может так?
var obj = {};
var a = 'start';
obj[a] = 5;
for(var key in obj){
    console.log(key === 'start');
}
Ключами в объектах javascript могут только строки, если что. (и Symbol в новом стандарте)
Для произвольных ключей в новом стандарте есть Map, но он только для современных браузеров. С Map как-то так:
var start = {};
var map = new Map();
map.set(start, 5);
map.forEach(function(value, key){
    console.log(key === start);
})

krutoy 08.12.2014 00:16

Цитата:

Сообщение от devote
в качестве ключей нельзя ничего использовать кроме строк

Так он и использует строку.

krutoy 08.12.2014 00:23

Цитата:

Сообщение от devote
а все иные типы будут автоматически переведены в строки.

Это как? так чтоли:
o={}
o.{}="bar"

???:)

ЗЫ все, понял, вот так
o={}
o.false="foo"

Но не со всеми типами это прокатывает. И, в данном случае, подстрока false в выражении o.false - это и есть строка изначально, она никакого отношения к false вообще не имеет. Тут "преобразование", такое же как foo.foo=1, т.е. семантически -- никакого.

krutoy 08.12.2014 01:12

Возможно, ты хотел вот этого
var start = {};
var obj = {};
var a = start;
obj.a = 5;
obj.b = start;
for(var key in obj){
    console.log(obj[key] === start);
}

//  false
//  true

только не ясно, зачем.

Aetae 08.12.2014 08:38

Цитата:

Сообщение от krutoy (Сообщение 345400)
Это как? так чтоли:
o={}
o.{}="bar"

Это так:
o={}
o[{}]="bar"
alert(o['[object Object]'])
наркоман несчастный.

Deff 08.12.2014 13:07

Цитата:

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

Вариант:
Кодирнуть объектную строку в btoa() и её использовать и как ключ и как расшифровку(atob()) ключа в объект

krutoy 08.12.2014 13:15

Deff,

o={}
o["{foo: 1}"]={foo: 1}
if("{foo: 1}" in o) alert(typeof o["{foo: 1}"])

Deff 08.12.2014 13:53

krutoy,
:) Моё красивше и обфусцированнее, эффективно для использовать для задания частоиспользуемых коротких функций JS библиотеки в небольших проектах


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