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 *
像这样访问您的对象: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]);
}
如果我运行:
$("#results ul").append(data.parse.langlinks.map(function(val){ return "<li>" + val.lang + "</li>" }));
我得到了 lang
的所有正确值,但我需要得到第一个对象,它没有口头命名,但它有
*
所以当我尝试像 val.*
那样访问它时,我得到:
Uncaught SyntaxError: Unexpected token *
像这样访问您的对象: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]);
}