VueJS - 有时会出错" Uncaught TypeError:无法读取属性'进程'未定义"

时间:2016-08-12 13:26:28

标签: javascript vue.js

我正在与Vue.JS和Laravel 5.2合作开展一个项目。

这是一个训练词汇的程序。所以在我的Vue-Data-Object中有一个包含wordpairs的数组。每个wordpair都存储为一个对象:

"words": [
    {
      "lang1": "Haus",
      "lang2": "house",
      "lang1_hint": "",
      "lang2_hint": "",
      "image_url": "",
      "tries": 0,
      "fails": 0,
      "process": 1
    },
    {
      "lang1": "Feuer",
      "lang2": "fire",
      "lang1_hint": "",
      "lang2_hint": "",
      "image_url": "",
      "tries": 0,
      "fails": 0,
      "process": 5
    },
    ...
]

现在我有一个函数,它取数组的长度,生成一个随机数并从上面的数组中返回一个随机数:

getRandomWord: function(){
    var i = Math.floor((Math.random() * this.words.length) + 1);
    if(this.words[i].process == 5){
        return this.getRandomWord();
    } else {
        return {
            index: i,
            content: this.words[i]
        }
    }
}

大多没有问题。但有时,会出现错误说:

Uncaught TypeError: Cannot read property 'process' of undefined

控制台说,错误发生在我的getRandomWord()if(this.words[i].process == 5)的if条件中。

知道为什么吗?过程的值始终为1,2,3,4或5.

到目前为止感谢!

3 个答案:

答案 0 :(得分:1)

Javascript数组的第一个索引是0,因此数组的最后一个索引是array.length - 1。您生成索引的代码:

  Math.floor((Math.random() * this.words.length) + 1);

有时会生成length的索引 - 该索引不存在。删除+1,你应该很好。

答案 1 :(得分:1)

我很确定你在这里遇到问题

  var i = Math.floor((Math.random() * this.words.length) + 1);

删除+1,你应该很好.Remember数组从索引0开始

答案 2 :(得分:1)

错误表示某些this.words[i]未定义i

你应该写

var i = Math.floor((Math.random() * this.words.length));