开发者问题收集

我收到错误:无法读取 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