Используя $ как ключ в объекте JS? - PullRequest
0 голосов
/ 16 апреля 2011

Пример:

console.log(myobject['media$group']);

выходы не определены

console.log(myobject['media\$group']);

выводит ожидаемое значение

В чем дело? Я столкнулся с этим при использовании API YouTube.

EDIT:

Меня смущают многие из вас, говоря, что это работает, поэтому я опубликую больше информации, потому что, возможно, я упускаю что-то глупое.

Вот код, который я запускаю:

console.log(feed);
console.log(feed["media$group"]["media$thumbnail"]);

Вот объект из первого среза бревна \ вставленный из firebug:

author
    [Object { name={...}, uri={...}}]

category
    [Object { scheme="http://schemas.google.com/g/2005#kind", term="http://gdata.youtube.com/schemas/2007#video"}, Object { scheme="http://gdata.youtube.co...mas/2007/categories.cat", term="Tech", label="Science & Technology"}, Object { scheme="http://gdata.youtube.com/schemas/2007/keywords.cat", term="google"}, 10 more...]

content
    Object { $t="The Google Doodle team ...googleblog.blogspot.com", type="text"}

gd$comments
    Object { gd$feedLink={...}}

gd$rating
    Object { average=4.77813, max=5, more...}

id
    Object { $t="http://gdata.youtube.co.../api/videos/3NGSU2PM9dA"}

link
    [Object { rel="alternate", type="text/html", href="http://www.youtube.com/...A&feature=youtube_gdata"}, Object { rel="http://gdata.youtube.co...as/2007#video.responses", type="application/atom+xml", href="http://gdata.youtube.co...s/3NGSU2PM9dA/responses"}, Object { rel="http://gdata.youtube.co...emas/2007#video.related", type="application/atom+xml", href="http://gdata.youtube.co...eos/3NGSU2PM9dA/related"}, 2 more...]

media$group
    Object { media$category=[1], media$content=[3], more...}

published
    Object { $t="2011-04-14T00:31:33.000Z"}

title
    Object { $t="Charlie Chaplin Google Doodle", type="text"}

updated
    Object { $t="2011-04-15T23:14:58.000Z"}

yt$statistics
    Object { favoriteCount="2539", viewCount="0"}

А вот и ошибка из второго console.log:

feed.media is undefined
[Break On This Error] console.log(feed["media"]["media"]); 

Ответы [ 4 ]

3 голосов
/ 16 апреля 2011

'media\$group' и 'media$group' равны, поскольку \$ не является известной escape-последовательностью и поэтому превращается в $.

Таким образом, поле просто было определено между вашими двумя вызовами.

0 голосов
/ 16 апреля 2011

Работает нормально.

a={'a':'test1', '$':'yes'}

console.log(a['$']); // 'yes'

Попробуйте this (jsfiddle)

0 голосов
/ 16 апреля 2011

Похоже, сервер экранирует символы в вашей строке. Эта или какая-то другая система построения строк экранировала символ $, а затем установила объект на это значение.

Также "foo$bar" === "foo\$bar"

0 голосов
/ 16 апреля 2011

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

var obj = {
    some$Key: 'someValue'
}

console.log(obj.some$Key); // someValue
console.log(obj['some$Key']); // someValue
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...