如果我跑:
$("#results ul").append(data.parse.langlinks.map(function(val){ return "<li>" + val.lang + "</li>" }));
我得到了lang
的所有正确值但是我需要获得第一个对象而且它没有口头命名但是它有
*
所以,当我尝试像val.*
那样访问它时,我得到了:
未捕获的SyntaxError:意外的令牌*
答案 0 :(得分:3)
像这样访问您的对象:val['*']
。
答案 1 :(得分:2)
访问包含特殊字符的对象时,您需要使用括号表示法:
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
答案 2 :(得分:1)
我的答案和其他答案一样,但有更多解释......
val["*"] // Bracket notation
JavaScript中的对象实际上并不比字典,键/值对的分组或其他方式的关联数组更多。
因此,您始终可以通过将字符串作为索引传递给对象来访问对象的属性(a.k.a.键)。但是,如果索引/键/属性名称不包含任何非法语言标识符,则可以使用更常见的“点表示法”。
考虑到这一点,大多数人可能会说对象属性名称不能包含空格,因为当然,这不会编译,似乎没有任何意义:
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]);
}