javascript - 当第一次将数据存储在 localstorage 中时,它将被存储,但第二次我尝试存储时,它显示错误 push is not function 为什么?
问题描述
html代码
<body>
<input type="text" id="userName">
<button onclick="empShow()">Click</button>
</body>
<script src="script.js"></script>
Javascript代码
function empShow(){
let emp=[];
let name=document.getElementById('userName').value;
let data={UserName:name};
emp=JSON.parse(localStorage.getItem('empData')) || [];
emp.push(data); //when i try to push data second time it display emp.push is not function.
localStorage.setItem('empData',JSON.stringify(data));
}
解决方案
在 localStorage 中第一次插入数据时:
localStorage.getItem('empData')
是null
。现在在那个(第一次)时间,
null || []
导致[]
. 即一个数组。
然后在下一行中,您在数组上调用了 push 方法。有效。然而第二次,
localStorage.getItem('empData')
不为空。让我们考虑一下您第一次在文本框中输入“测试”的情况。所以值localStorage.getItem('empData')
变成了'{"UserName":"test"}'。
将字符串值解析为 JSON 对象转换的变量 emp JSON 变量。一个 JSON 值与空数组 [] 进行了 OR 运算,这一次得到了 JSON 本身,它不是一个数组,也没有 push 方法。结果,您收到了该错误。
推荐阅读
- java - Intellij 不接受 openjdk 15
- ruby - 比较 2 个库的“大小”
- mysql - 如何在 SQL 中用 JOIN 替换 EXISTS 和 NOT EXISTS,以便将其转换为关系代数?
- html - 提交时表单不会重定向到提交消息页面并且不会发布到 netlify
- ruby-on-rails - Ruby 高效的每个循环
- git - ssh:连接到主机 gitlab.com 端口 22:网络不可达
- python - 执行用于 RNA seq 分析的定制 python 脚本的问题
- ruby-on-rails - PG::DependentObjectsStillExist: 错误: 不能删除 xxxxx 的列 xxx_id 因为其他对象依赖它
- python - 使用函数发布更新列表
- gremlin - gremlin 如何设置 scriptevaluationtimeout 0