使用$作为JS对象的键?

时间:2011-04-15 23:22:06

标签: javascript json

示例:

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

输出undefined

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

输出预期值

这笔交易是什么?我在使用youtube的API时遇到了这个问题。

编辑:

我很多人都很困惑,说它有效,所以我会发布更多信息,因为我可能会错过一些愚蠢的东西。

这是我正在运行的代码:

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 个答案:

答案 0 :(得分:3)

'media\$group''media$group'相等,因为\$不是已知的转义序列,因此转为$

因此,只需在两次调用之间定义字段。

答案 1 :(得分:0)

你的情况很有意思,我不知道为什么你需要用反斜杠来逃避$字符,但这些是预期的输出。

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

console.log(obj.some$Key); // someValue
console.log(obj['some$Key']); // someValue

答案 2 :(得分:0)

听起来像服务器在字符串中转义字符。那个或其他一些字符串构建系统已经转义$字符,然后将对象设置为该值。

另外"foo$bar" === "foo\$bar"

答案 3 :(得分:0)

工作正常。

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

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

尝试this(jsfiddle)