这在javascript中是什么类型的对象?

这在javascript中是什么类型的对象?,javascript,object,Javascript,Object,我有一个对象“obj”。我们暂时不知道它从哪里来 如果我这样做 console.log(JSON.stringify(obj)); 我得到 [{"foo":101,"bar":1,"foobar":0},{"foo":102,"bar":1,"foobar":0}] 这是什么东西 我在问我看到了两种我无法理解的行为: 1) 它似乎是一个对象数组(?),所以我想是这样的 console.log(obj[0]) for (var somevar in obj){ console.log

我有一个对象“obj”。我们暂时不知道它从哪里来

如果我这样做

console.log(JSON.stringify(obj));
我得到

[{"foo":101,"bar":1,"foobar":0},{"foo":102,"bar":1,"foobar":0}]
这是什么东西

我在问我看到了两种我无法理解的行为:

1) 它似乎是一个对象数组(?),所以我想是这样的

console.log(obj[0])
for (var somevar in obj){ 
   console.log(JSON.stringify(somevar));
}
返回:

{"foo":101,"bar":1,"foobar":0},{"foo":102,"bar":1,"foobar":0}
相反,它返回:

{"foo":101,"bar":1,"foobar":0}
2) 我希望

console.log(obj[0])
for (var somevar in obj){ 
   console.log(JSON.stringify(somevar));
}
归来

first step: {"foo":101,"bar":1,"foobar":0}
second step: {"foo":102,"bar":1,"foobar":0}
相反,它又回来了

first step: "0"
second step: "1"

有人能解释一下这个对象的性质,以及为什么这两种情况(特别是第二种情况)会返回这样的结果吗?

obj是数组或对象。它在索引
0
1
处有两个对象,这就是为什么执行
console.log(obj[0])它只提供
{“foo”:101,“bar”:1,“foobar”:0}
。这是索引
0
处的对象

对于第二个问题,For(var somevar in obj)
obj
的每个键上循环,因为它是数组数据类型,所以数组的键总是它的
索引值。这就是为什么控制台中会出现
0
1
。为了实现这项工作,您需要在< <代码> > <代码> > <代码> >值> <代码> >而不是<代码> >键<代码> > <代码> Obj>代码>数组.< /p>
var obj=[{“foo”:101,“bar”:1,“foobar”:0},{“foo”:102,“bar”:1,“foobar”:0}];
对于(obj的var somevar){
log(JSON.stringify(somevar));

}
数组是JavaScript中的对象。所以这种行为完全是意料之中的。索引是数组的键。 所以当你这么做的时候
console.log(obj[0])
您只需访问数组中的第一项
然后在第二种情况下,您只需将字符串化键“0”和“1”注销到第一个问题:

数组中有两个元素:

var obj=
[
{“foo”:101,“bar”:1,“foobar”:0},//索引0处的第一个元素
{“foo”:102,“bar”:1,“foobar”:0}//索引1处的第二个元素
];

console.log(obj[0])针对您的第一个问题—当我们通过数组的索引访问数组时,它返回该特定索引的值。e、 g

var first_array = ['A', 'B', 'C', 'D'];
var secound_array = [{"foo":101,"bar":1,"foobar":0},{"foo":102,"bar":1,"foobar":0}];
使用索引访问数组数据的Syntex是
数组变量[index]
,其中索引是数值。例如

first_array[0] // output = A
first_array[2] //output = C
secound_array[0] // output = {"foo":101,"bar":1,"foobar":0}
这是您的第一个问题解决方案,因为您是通过数组索引访问元素的。数组的索引从0开始。 对于第二个问题
For..in
语句使用索引而不是值进行迭代。如果我像下面这样写代码-

for (var somevar in secound_array){ 
   console.log(JSON.stringify(somevar));
}
输出是

first step: 0
second step: 1
如果你想要像这样的输出

first step: {"foo":101,"bar":1,"foobar":0}
second step: {"foo":102,"bar":1,"foobar":0}
您需要像下面这样编写代码-

for (var somevar of secound_array){ 
   console.log(JSON.stringify(secound_array[somevar])); // here somevar is index of the item
}
更多信息 你也可以查一下。e、 g


这是一个对象数组。我不明白为什么在第一种情况下会出现这种输出。您似乎不了解数组是如何工作的,也不知道
for..in
是如何工作的……您可以在这里使用
for..of
。它将获取元素而不是索引。为什么希望
console.log(obj[0])
返回
{“foo”:101,“bar”:1,“foobar”:0},{“foo”:102,“bar”:1,“foobar”:0}
。@sashagreevus:因为输入错误。请注意并安装/配置拼写检查。您可以添加以下内容:要获取数组中的对象,应在循环中使用
of
而不是
in
中的
。如果是简单的对象数组,编译器为什么会抱怨“类型{}中不存在属性lenght”?我做的第一件事是尝试将其作为数组循环,但它似乎没有“lenght”,所以我如何循环?@sasharievus:“那么我如何循环”-您可以通过正确拼写
length
开始。@sasharievus检查更新的答案。您仍然可以在
@Ankit Agarwal中使用obj的
var somevar
而不是
,非常感谢,我收到了这个。关于长度的错误仍然很奇怪。如果我用“of”代替“in”,编译器会说“Type'{}”'不是矩阵类型或字符串:DThank you,你是对的。但在我的例子中,编译器会返回该错误。如果没有对情况的全面了解,可能根本不可能对此进行调试,但无法解释或篡改所有内容。数据由node.js web服务返回,该服务返回查询结果,然后响应是tak通过一个ionic 3应用程序,用JSON.parse解析,这就是问题的开始。非常感谢anyway@SergioTulentsev,这是用主题开头语写的。-@Bharata感谢你在和中的例子。理解这一点对我来说真的很有价值:)@SergioTulentsev,好的,你说得对!我为了你和世界和平而改变了它!;-)@Sasharievus,在根据网站规则回答您的问题后,您不能更改问题中的语言。可能是您的新代码有一些错误。但在这种情况下,您必须提出新问题,因为我正确回答了您的问题。如果您对我的回答感到满意,请在左侧将其标记为已接受我的答案,然后在新帖子中写一个新问题。