JavaScript数组push方法无效

7

我正在尝试将一个值推入数组中,但在开发者工具中出现了以下错误。

Uncaught TypeError: Cannot read property 'push' of null

这是似乎卡住的代码,word和local word之前是这样定义的。

var word = [];
var localWord = []; 

function setLocalArray() {
    // first get words from text field and update word array.
    word = document.getElementById("words").value.split(',');

    // store word array in localStorage            
    for(var i=0; word.length > i; i++) {
        var key2 = "part"+i;
        localStorage.setItem(key2,word[i]);
        localWord.push(key2);
    }

    localStorage.setItem("localWord",JSON.stringify(localWord));
    text2Array();
    reveal();
}

localWord.push(key2);似乎是程序卡在这里的地方。我已经查看了所有我能找到的关于push方法的内容,但我似乎找不到它为什么给我这个错误。求助?

以下是完整代码jsfiddle链接http://jsfiddle.net/runningman24/jnLtpb6y/


13
localWord 不知怎么被更改成了 null。是否有任何地方重新分配 localWord 的值? - Ry-
text2Array和reveal中发生了什么? - Rooster
在JavaScript中不要创建全局变量,例如: var word = []; var localWord = []; 其他函数也可以更新它。 - Ganesh Anil Kalumbe
2
我的直觉告诉我你的代码中有 localWord = JSON.parse(localStorage.getItem("localWord")) 这段代码,这就是为什么 localWord 是 null 的原因。请在发问题时展示所有相关代码。 - JLRishe
这是完整的代码。感谢所有出色的评论。http://jsfiddle.net/runningman24/jnLtpb6y/ - urock24
显示剩余2条评论
3个回答

3
尝试这个...
var localWord = new Array(); //create new array
var word = new Array();

function setLocalArray() {
    word = document.getElementById("words").value.split(',');
    // store word array in localStorage             
    for(var i=0; word.length > i; i++) {
        var key2 = "part"+i;
        localStorage.setItem(key2,word[i]);
        localWord.push(key2);
    }
}

2
我找到了问题,如果你查看我发布的jsfiddle,你会发现我试图从localStorage中提取localWord,即使它不存在,因此它设置为null。感谢大家的想法和贡献。

0
你可以尝试使用模块模式来隔离变量的作用域:
var arrayManager =  (function () {
        var word = [];
        var localWord = []; 

        function setLocalArray() {
            // first get words from text field and update word array.
            word = document.getElementById("words").value.split(',');

            // store word array in localStorage            
            for(var i=0; word.length > i; i++) {
                var key2 = "part"+i;
                localStorage.setItem(key2,word[i]);
                localWord.push(key2);
            }

            localStorage.setItem("localWord",JSON.stringify(localWord));
            text2Array();
            reveal();
        }

       return {
          setLocalArray:setLocalArray
        } ;
    }());

而从外部来看,您只需要调用arrayManager.setLocalArray()即可


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接