Json 第一个对象是一个*,如何获取?

Json first object is a *, how to get it?

如果我运行:

$("#results ul").append(data.parse.langlinks.map(function(val){ return "<li>" + val.lang + "</li>" }));

我得到了 lang 的所有正确值,但我需要得到第一个对象,它没有口头命名,但它有

*

所以当我尝试像 val.* 那样访问它时,我得到:

Uncaught SyntaxError: Unexpected token *

JsFiddle

像这样访问您的对象:val['*'] .

访问包含特殊字符的对象时需要使用括号表示法:

return val['*'] + "</li>";

https://jsfiddle.net/ryanpcmcquen/fg395Lp9/

还值得注意的是,在使用变量或保留关键字访问对象时需要使用括号表示法(感谢@DarthJDG 指出):

var foo = '*';
return val[foo];

此外,如果您正在探索 JavaScript 的一些较新的方面,计算的 属性 名称包含括号表示法:

https://ryanpcmcquen.org/javascript/2016/10/25/computed-property-names-are-awesome.html

我的回答和其他人一样,只是多了一点解释...

val["*"]  // Bracket notation

JavaScript 中的对象实际上不比字典、key/value 对的分组或换句话说,关联数组多多少。

因此,您始终可以通过将字符串作为索引传递给对象来访问对象的 属性(a.k.a. 键)。但是,如果 index/key/property 名称不包含任何非法语言标识符字符,那么您可以使用更常见的 "dot notation".

极端一点,大多数人可能会说对象 属性 名称不能包含空格,因为当然,这不会编译并且似乎没有任何意义:

 obj.some property name = "10";    // won't compile

但是,如果您将对象视为数组并将 属性 名称视为键,您实际上可以拥有一个包含空格的 属性 名称:

 obj["some property name"] = 10;  // perfectly fine

这也为动态代码提供了一些很好的机会,因为它允许您动态传递密钥(字符串):

var keyName = new Date().toLocaleTimeString();
    
var obj = {};
obj[keyName] = "some value";
     
for(var prop in obj){ 
     console.log("The obj." + prop + " property has a value of: " + obj[prop]);
}