为何while循环无法将数据保存到localStorage?
你的While循环问题分析与修复方案
代码里的核心问题:
- 变量
i未初始化:你只声明了var i但没给初始值,默认是undefined,执行i++后变成NaN,用NaN当数组索引根本存不了数据。 - if条件用错运算符:
if (dude[i]='done')是赋值操作(把'done'塞给dude[i]),不是比较,这会导致这个条件永远为真,逻辑完全乱了,得用===做严格比较。 - 循环流程颠倒:你先假设
dude[i]是'done'才去弹输入框,这完全搞反了——应该先让用户输入,再判断是不是'done'。 - 存储逻辑错误:每次
SaveData只存单个dude[i],而且localStorage直接存单个值的话,新值会覆盖旧值,最后自然只剩'done';另外localStorage只能存字符串,存数组得转成JSON格式。 Enter初始值未定义:第一次进循环时Enter是undefined,虽然能进循环,但后续逻辑会混乱。
修正后的代码:
<!DOCTYPE html> <html> <head> <title>dude</title> <meta charset="utf-8" /> </head> <body> <script type="text/javascript"> 'use strict'; let i = 0; // 初始化数组索引 let Enter; const dude = []; function SaveData() { // 把整个数组转成JSON字符串存入localStorage,保留所有内容 localStorage.setItem("DATA", JSON.stringify(dude)); } while (true) { Enter = prompt("请输入内容,输入'done'结束"); if (Enter === 'done') { break; // 输入done就退出循环 } if (Enter) { // 过滤空输入 dude[i] = Enter; i++; SaveData(); // 每次输入后更新存储 } } </script> </body> </html>
修正说明:
- 给
i设初始值0,确保数组从第一个位置开始存数据 - 调整循环逻辑:先弹输入框拿内容,判断是'done'就退出,否则存入数组
SaveData改成存储整个数组的JSON字符串,这样所有输入内容都会被保留,读取时用JSON.parse(localStorage.getItem("DATA"))就能还原数组- 增加空输入判断,避免存入无效内容
- 用
===做严格比较,避免类型转换导致的意外问题
内容的提问来源于stack exchange,提问作者Enko
相关产品推荐
相关产品推荐

