我收到错误:无法读取 null 的属性“push”
2017-12-30
3084
我尝试过 此参考 ,但无论如何它都没有用。
这对我来说是个新事物,我才刚刚开始学习 javascript。
var getTbl = localStorage.getItem("tableList");
var resultTable = [];
if (getTbl !== undefined && getTbl !== '') {
resultTable = JSON.parse(getTbl);
}
let newtableHTML = addTable;
resultTable.push({
table: newtableHTML
});
// save the new resultFolder array
localStorage.setItem("tableList", JSON.stringify(resultTable));
我尝试过这样的方法,但没有成功:
var resultTable = resultTable || [];
如果我尝试的方式是错误的,请见谅。
2个回答
该行
resultTable = JSON.parse(getTbl);
用
JSON.parse
返回的内容替换
resultTable
变量的内容。显然
JSON.parse
未返回数组(或具有
push
方法的其他类型的对象,但数组是唯一具有该功能内置的对象)。
我猜它返回的是
null
,因为如果键在本地存储中不存在,则
getItem
返回
null
,但您没有检查这一点。因此,您将
null
传递到
JSON.parse
,它会被强制转换为字符串 (
"null"
),然后解析为 JSON,产生...
null
。
由于您存储的是数组(数组永远不会为假值),我可能会这样做:
var getTbl = localStorage.getItem("tableList");
var resultTable = getTbl ? JSON.parse(getTbl) : []; // <====
let newtableHTML = addTable;
resultTable.push({
table: newtableHTML
});
// save the new resultFolder array
localStorage.setItem("tableList", JSON.stringify(resultTable));
这会测试
getItem
给我们的内容是否为假值,如果是,则改用
[]
。
但这个主题有十几种变体。例如:
var resultTable = JSON.parse(localStorage.getItem("tableList") || "[]"); // <===
let newtableHTML = addTable;
resultTable.push({
table: newtableHTML
});
// save the new resultFolder array
localStorage.setItem("tableList", JSON.stringify(resultTable));
T.J. Crowder
2017-12-30
将“resultTable”的初始化方式更改为:
resultTable = new Array();
以便数据可以正确推送到resultTable。
Prasanth M P
2019-11-16