2015-06-30 4 views
1

Я довольно новичок в программировании и изучении JavaScript и пытается понять имена объектов и свойств. В следующем примере (от https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Property_Accessors) на уроке указано, что этот код (ниже) выводит «значение», поскольку оба foo и bar преобразуются в одну и ту же строку. Я понимаю, что свойство должно быть строкой и что число будет автоматически вводиться как строка, но я не понимаю, почему и foo, и bar разрешают «значение». Мне кажется, что последняя строка кода должна быть «2», так как var bar = 2. Что мне не хватает? Спасибо!Confused by property property output

var foo = {unique_prop: 1}, bar = {unique_prop: 2}, object = {}; 
object[foo] = 'value'; 
console.log(object[bar]); 
+1

Ключ не может быть объектом. Что происходит, так это то, что объект будет стягиваться, и вы получите '{'[Object Object]': 'value'}' – elclanrs

+0

@elclanrs: ну, объекты _can_ будут ключами, как мы видим выше, но это не то, что нужно потому что все объекты данных будут выдавать один и тот же ключ. – dandavis

+0

вы можете захотеть 'object [foo.unique_prop]' – dandavis

ответ

3

Я понимаю, что это свойство должно быть строкой, и что число будет автоматически набирается в виде строки

Да, ключ должен быть строкой. Если это не так, то все, что вы передадите, будет преобразовано в строку, включая объекты. Вы можете прочитать, что вы написали, как:

object[foo.toString()] = 'value' 

Объект строковой дает '[object Object]'. Таким образом, вы будете добавлять и извлекать один и тот же ключ:

{'[object Object]': 'value'} 
+0

Мне жаль, что я не следую. Я даже спросил пару сотрудников, которые занимаются написанием сценариев на других языках, и они тоже не следуют. Когда я набираю код в Кодепене, ничего не происходит. Во-первых, когда я смотрю на последняя строка, я не понимаю, почему (object [bar]) не разрешается (object ['2']). Во-вторых, я не понимаю, как две или три линии связаны вообще. foo. Строка три говорит о баре. Строка три - это где действие происходит, правильно? –

+0

@HollyFortenberry: Два разных объекта разрешают ** ту же ** строку: '' [object Object] ''. Так что это то же самое что вы ожидаете 'object [bar]' для решения 'object ['2']'? Это точка путаницы, она разрешает 'object [' [object Object] '] ' – elclanrs

+0

Причина, по которой я думаю, что она разрешает объект [' 2 '], состоит в том, что я вижу в первой строке, что var bar присваивается {unique_prop: 2}. преобразуется в строку, '2'. Простите, если я пропущу что-то действительно основное. Я очень новичок в этом. Я чувствую себя глупым. –