JSON中的对象数组的作用与本地创建的对象数组不同

时间:2018-09-02 10:03:28

标签: javascript arrays json

我一直在学习Wes Bos的Javascript30课程,并且一直在使用JSON和数组。

我试图弄清楚这里发生了什么。

我有一个简单的JSON测试文件,该文件正在提取并推入数组中,并且在本地创建了相同的数组。当我尝试用本地数组console.log的第一个人的名字时,它可以正常工作。但是,当我尝试console.log提取JSON数组中第一个人的名字时,出现错误"Uncaught TypeError: Cannot read property 'name' of undefined"

JSON文件:

[
  {
    "name":"Sean",
    "Age":"23"
  },
  {
    "name":"kev",
    "Age":"23"
  }
]

javascript:

const people = [];
const peopleLocal = [ {"name":"Sean", "age":"23"}, {"name":"kev", 
"age":"23"}];
const endpoint = "test.json";
fetch(endpoint)
  .then(blob => blob.json())
  .then(data => people.push(...data));

console.log(people);
console.log(peopleLocal);


console.log(peopleLocal[0].name);
console.log(people[0].name);

console.log(people)console.log(peopleLocal)返回相同的对象数组。然后console.log(peopleLocal[0].name)返回“ Sean”。但是console.log((people[0].name)返回上面提到的undefined错误。为什么?

1 个答案:

答案 0 :(得分:1)

它们的行为完全没有不同,您只是在异步获取完成之前打印名称方式。尝试在正确的时间进行打印,即在收到响应的回溯中,如下所示:

const people = [];
const peopleLocal = [ {"name":"Sean", "age":"23"}, {"name":"kev", 
"age":"23"}];
const endpoint = "test.json";
fetch(endpoint)
  .then(blob => blob.json())
  .then(data => {
      people.push(...data);
      console.log(people);
      console.log(people[0].name);
  });

console.log(peopleLocal);
console.log(peopleLocal[0].name);
  

但是console.log(people)在回调之外如何工作,但是   不是console.log(people [0] .name)?

好问题。开发者控制台的对象浏览器实际上存储了对该对象的引用,而不是对象的副本,因此,在控制台上查看它时,您看到的是最新值,而不是打印时的值。

看到这个答案:

console.log() shows the changed value of a variable before the value actually changes