有人可以解释一下这里发生了什么吗?我如何至少检索1
?
$> for (var i in [{a: 1, b: "ok"}]) { console.log(i); }
0
答案 0 :(得分:4)
因为for ... in
循环遍历对象的键。你传递了一个带有一个元素的数组(元素0),所以得到0。
如果你这样做:
for (var i in {a: 1, b: "ok"}) { console.log(i); }
你会得到“a”和“b”。区别在于您拥有的括号。这使得对象成为具有单个值的数组,该值是“a - b”对象。
如果您想要获取对象中的值,则需要获取它们。不幸的是,当你从一个对象文字开始时,这有点棘手,因为没有办法引用它。你可以把它放在一个变量中:
var obj = {a: 1, b: "ok"};
for (var i in obj) { console.log(obj[i]); }
编辑 - 如果你想保留一个没有那个讨厌的局部变量的“干净”语句:
(function(obj) {
for (var i in obj) { console.log(obj[i]); }
})( {a: 1, b: "ok"} );
答案 1 :(得分:1)
var dicts = [{a: 1, b: "ok"}];
for (var i in dicts) { console.log(dicts[i]); }
//yields {a: 1, b: "ok"}
for (var i in dicts) { console.log(dicts[i]['a']); }
//yields 1
答案 2 :(得分:0)
尝试通过将{}停放到变量中来保存所有信息。
c = {a:1,b:'ok'};
for(var i in c){console.log(c[i])};
答案 3 :(得分:0)
var dict_array = [{a: 1, b: "ok"}];
for (var i = 0; i < dict_array.length; i++) {
for (var key in dict_array[i]) {
console.log(key + ':' + dict_array[i][key]);
}
}
输出:
a:1
b:ok