1

有人可以解释一下这里发生了什么吗?我怎样才能至少检索到1

$> for (var i in [{a: 1, b: "ok"}]) { console.log(i); }
0
4

4 回答 4

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"} );
于 2013-07-29T23:03:33.240 回答
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
于 2013-07-29T23:06:29.100 回答
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
于 2013-07-29T23:11:41.577 回答
0

尝试通过将 {} 停放在变量中来保存所有信息。

c = {a:1,b:'ok'};
for(var i in c){console.log(c[i])};
于 2013-07-29T23:05:57.347 回答