debugging 声明API请求之前,在Javascript中使用push()时,数组被设置为来自API请求的数据

cqoc49vn  于 2023-03-03  发布在  Java
关注(0)|答案(1)|浏览(120)

当使用push方法时,为什么在声明API请求之前,第一个console.log(字符)从API请求返回数据?
如果不是将数据推送到字符,而是将其设置为注解掉的代码中的数据,则只有第二个console.log()返回预期的数据。
在这两个例子中,console.log(“第一个控制台日志”)总是像预期的那样首先执行,所以当使用push()方法时,console.log(“第一个控制台日志”)首先执行,但是第一个console.log(字符)仍然记录在console.log(“第一个控制台日志”)之前声明的数组,其中包含来自fetch()的数据。
使用VScode和chrome开发工具。

let characters = []
console.log("First console log")
console.log(characters)

fetch("https://hp-api.onrender.com/api/characters")
  .then(res => res.json())
  .then(data => {
    characters.push(data)
    // characters = data
    console.log(characters)
    console.log("Second console log")
  })
gc0ot86w

gc0ot86w1#

这是因为console.log()的输出是对数组的活引用,如果数组在记录后发生了变化,仍然可以在引用上看到变化。
如果将其打印为JSON(即console.log(JSON.stringify(characters))),则会得到'[]'。
当您将characters设置为新数组时,控制台中的引用仍然指向未更改的旧数组。

相关问题