开发者问题收集

渲染时出错:“TypeError:无法读取未定义的属性‘id’”

2021-03-15
724

我仅在尝试打印 questions 数组的第一个问题的 id 时收到此错误。(我获取了值,但控制台中也显示了此错误)

<p> {{ questions[0].id }} </p>

但是当我尝试循环问题时,没有错误。

<p v-for="i in questions" :key="i.id">
   {{ i.id }}
</p>

模板的脚本部分

<script>
export default {
  data() {
    return {
      questions: []
    }
  },
  mounted(){
    axios.get('/get_questions')
      .then((res) => {
        this.questions = res.data
      });
  }
}
</script>
2个回答

因为当页面刚刚加载时, questions 是一个空数组。

当您尝试循环一个空数组时,循环体根本就不会运行:

for(let i of []) {
  // this part will not reach
}

但是当您尝试从空数组的第一个元素( undefined )获取参数时,它会抛出一个错误。

[][0].id  // can't read ".id" from undefined

您可以做的是确保 questions 中包含内容:

<p v-if="questions.length > 0"> {{ questions[0].id }} </p>
Hao Wu
2021-03-15

之所以会抛出此错误,是因为您在 axios 完成要求之前就直接访问了插值中的索引 [0],因此会抛出错误。

这不安全,而且肯定会导致错误。 您可以做的是在插值中添加一些条件

{{ questions.length > 0 ? questions[0].id: '' }}
keysl
2021-03-15