JavaScript如何读写外部文件为变量/array赋值实现高分持久存储
JavaScript 本地持久化存储高分实现方案
纯JavaScript完全可以实现高分数据持久化,不需要编写HTML或CSS代码,根据你的游戏运行环境选对应方案即可。
Node.js 运行环境(命令行/本地桌面脚本场景)
如果你的游戏是直接通过Node.js跑的纯JS脚本,用Node内置的文件系统模块就能直接读写本地文本文件,不需要安装任何第三方依赖:
- 游戏启动阶段读取本地高分文件,解析为数组赋值给变量
// 引入Node内置文件操作模块 const fs = require('fs'); // 定义高分文件存储路径 const SCORE_STORE_PATH = './top5_scores.txt'; let highScoreList = []; // 初始化读取分数 try { const fileRaw = fs.readFileSync(SCORE_STORE_PATH, 'utf-8'); highScoreList = JSON.parse(fileRaw); } catch (e) { // 首次运行文件不存在时,初始化为空数组 highScoreList = []; } - 游戏结束触发高分榜更新时,把最新数组同步写入文件
function saveNewScore(newScore) { // 新分数入榜、降序排序、截取前5名 highScoreList.push(newScore); highScoreList.sort((scoreA, scoreB) => scoreB - scoreA); highScoreList = highScoreList.slice(0, 5); // 写回本地文件 fs.writeFileSync(SCORE_STORE_PATH, JSON.stringify(highScoreList), 'utf-8'); }
如果需要存成电子表格可直接打开的格式,只要把存储路径后缀改成.csv,写入时把数组转成逗号/换行分隔的文本即可,读取时按分隔符拆分回数字数组就行。
浏览器运行环境(网页端打开游戏场景)
浏览器出于安全限制,不允许JS直接操作本地硬盘的任意文件,不需要写HTML/CSS的前提下,可以用浏览器原生的LocalStorage做持久化,刷新、重启浏览器数据都不会丢失:
let highScoreList = []; // 初始化读取存储的分数 const savedData = localStorage.getItem('asteroids_high_scores'); if (savedData) { highScoreList = JSON.parse(savedData); } function saveNewScore(newScore) { highScoreList.push(newScore); highScoreList.sort((scoreA, scoreB) => scoreB - scoreA); highScoreList = highScoreList.slice(0, 5); // 写回浏览器本地存储 localStorage.setItem('asteroids_high_scores', JSON.stringify(highScoreList)); }
如果需要导出成独立的txt/csv文件,仅用JS也能实现,不需要写CSS,核心是调用浏览器的Blob生成文件的API,全程逻辑都在JS层完成。
注意:LocalStorage存储的数据是和浏览器域名绑定的,清理浏览器缓存会导致数据丢失,如果需要长期离线可备份的分数存储,优先选Node.js读写本地文件的方案。
内容的提问来源于stack exchange,提问作者Chris Jonson
相关产品推荐
相关产品推荐

