JavaScript中更新localStorage数组报错求助:Uncaught SyntaxError
解决localStorage数组操作的语法错误与逻辑问题
嘿,我来帮你搞定这个localStorage数组的问题!你遇到的Uncaught SyntaxError: Unexpected token ]错误是因为数组赋值的写法不对,还有几个隐藏的逻辑问题也得一起修正,我给你一步步拆解:
问题1:数组添加元素的语法错误
你写的data[]=bank是不符合JavaScript语法的,要给数组追加元素,正确的写法是用push()方法,或者data[data.length] = bank,前者更简洁常用。
问题2:$.inArray的判断逻辑错误
$.inArray的返回规则是:找到元素返回对应索引(从0开始),找不到返回-1。你原来的if(!$.inArray( bank, data ))会把索引为0的元素(也就是数组第一个元素)误判为“不存在”(因为!0等于true),导致第一个元素永远加不进去。正确的判断应该是检查返回值是否等于-1。
问题3:未处理localStorage初始为空的情况
当用户第一次操作时,localStorage里还没有bank这个键,直接JSON.parse(localStorage.bank)会报错(因为localStorage.bank是undefined,无法被JSON解析),所以要先判断是否存在该键,不存在就初始化空数组。
修正后的完整代码
var bank = document.getElementById('name_bank').value; function AddBank(bank) { // 初始化数组:如果localStorage中没有bank数据,就创建空数组 var data = localStorage.getItem("bank") ? JSON.parse(localStorage.getItem("bank")) : []; // 检查当前bank是否未在数组中 if ($.inArray(bank, data) === -1) { // 给数组添加新元素 data.push(bank); // 将更新后的数组存回localStorage localStorage.setItem("bank", JSON.stringify(data)); } }
额外注意点
- 推荐用
localStorage.getItem("bank")代替直接localStorage.bank,前者更规范,遇到特殊键名时也能正常工作。 - 确保你已经引入了jQuery(因为用到了
$.inArray),如果不想依赖jQuery,可以用原生JS的data.indexOf(bank) === -1(现代浏览器都支持,IE8及以下除外)。
内容的提问来源于stack exchange,提问作者Muhammad Ashraf
相关产品推荐
相关产品推荐

