You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

从API推送数据到对象数组后无法访问指定下标元素如何解决

问题原因分析

1. 数组下标访问返回undefined的核心原因

你的代码里getCountriesData是异步函数,fetch请求是异步操作,你执行两个console.log的时候,API请求还没完成,countriesArr还没有被填充数据,是空数组:

  • 直接打印countriesArr[0]的时候,空数组的0号下标自然返回undefined
  • 打印整个countriesArr的时候,浏览器控制台对引用类型的输出存在「惰性求值」特性:你打印时记录的是数组的引用,等你点开控制台展开数组的时候,API请求已经完成,数组已经被填充了数据,所以你能看到完整的数组内容。

2. typeof数组返回object的原因

这是JavaScript的固有特性:数组属于引用类型,typeof运算符对所有非基础类型的引用值(除了函数)都会返回object,并不是你的变量类型出错了。要准确判断是不是数组,应该用Array.isArray(countriesArr)方法。


解决方法

所有需要用到countriesArr数据的操作,都要放在异步请求完成之后执行,常见实现方式如下:

const countriesURL = 'https://restcountries.eu/rest/v2/all';
let countriesArr = [];

async function getCountriesData() {
  const response = await fetch(countriesURL);
  const data = await response.json();
  showCountries(data);
  // 异步请求完成后再访问数组,可正常拿到值
  console.log(countriesArr[0]);
}

function showCountries(countries) {
  countries.forEach((country) => {
    countriesArr.push(country)
  })
}

// 触发请求
getCountriesData()

如果需要在getCountriesData函数外部访问数组,可利用async函数返回Promise的特性实现:

getCountriesData().then(() => {
  console.log(countriesArr[0])
})

内容的提问来源于stack exchange,提问作者philipHinch

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 09:33:02