javascript中的对象是什么?

时间:2018-07-19 09:44:26

标签: 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])

返回:

{"foo":101,"bar":1,"foobar":0},{"foo":102,"bar":1,"foobar":0}

相反,它返回:

{"foo":101,"bar":1,"foobar":0}

2)我希望

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"

有人可以解释这个对象的性质吗,为什么这两种情况(尤其是第二种情况)返回这样的结果?

4 个答案:

答案 0 :(得分:2)

obj是数组或对象。它在索引01上有两个对象,这就是为什么当您执行console.log(obj[0]);时它只给您{"foo":101,"bar":1,"foobar":0}的原因。索引为0的对象。

对于第二个问题,for (var somevar in obj)遍历obj的每个键,由于它是数组数据类型,所以数组的键始终是其index值。这就是为什么您在控制台中获得01的原因。为此,您需要在var somevar of obj中进行for,然后再考虑value数组中的key而不是obj

var obj = [{"foo":101,"bar":1,"foobar":0},{"foo":102,"bar":1,"foobar":0}];

for (var somevar of obj){ 
   console.log(JSON.stringify(somevar));
}

答案 1 :(得分:2)

对于您的特定第一个问题-当我们通过其索引访问数组时,它将返回该特定索引的值。例如

var first_array = ['A', 'B', 'C', 'D'];
var secound_array = [{"foo":101,"bar":1,"foobar":0},{"foo":102,"bar":1,"foobar":0}];

使用索引为array_variable[index]的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
}

有关更多信息,click here 您还可以检查for...of。例如

for (let o of secound_array) {
    console.log(o)
}

答案 2 :(得分:1)

第一个问题:

您的数组中有两个元素:

var obj = 
[
    {"foo": 101, "bar":1, "foobar": 0}, //first element at index 0
    {"foo": 102, "bar":1, "foobar": 0}  //second element at index 1
];

console.log(obj[0]);

如果您写console.log(obj[0]);,则一次获取第一个元素而不是2个元素,因为在索引0处只有一个元素。 这是正确的。

第二个问题:

var obj = [{"foo": 101, "bar":1, "foobar": 0},{"foo": 102, "bar":1, "foobar": 0}];

for (var somevar in obj){ 
    console.log(JSON.stringify(somevar));
}

这放在控制台中:

  

第一步:“ 0”

     

第二步:“ 1”

这也是正确的。出于您的需要,您必须使用for of循环,而不要使用for in,因为for in为您提供了元素的索引,并且不是像for of这样的元素。

检查for infor of之间的区别:

var arr = [ 3, 5, 7 ];

for(var i in arr) {
    console.log(i); // 0, 1, 2
}

console.log('-----');

for(var i of arr) {
    console.log(i); // 3, 5, 7
}

答案 3 :(得分:0)

数组是JavaScript中的对象。因此,完全可以预期该行为。索引是数组的键。 所以当你这样做 console.log(obj[0]) 您只需访问数组中的第一项 然后在第二种情况下,您只需注销字符串化的键“ 0”和“ 1”