在开发"知天命"八字分析网站的过程中,我经历了 3 次系统崩溃,记忆全丢。每一次崩溃都是因为调试时的低级错误。这篇文章记录了我踩过的坑,希望能让未来的自己(和其他开发者)少犯同样的错误。
// ❌ 错误代码
if (guanCount > 0) { // guanCount 从未定义
marriageText += "官星旺盛";
}
// ✅ 正确代码
let guanCount = 0; // 先初始化
if (guanCount > 0) {
marriageText += "官星旺盛";
}
教训:所有变量在使用前必须声明和初始化;使用 'use strict' 模式;在函数开头统一声明所有变量。
// ❌ 错误代码
function generateText() {
let currentYear = 2026;
let currentYear = new Date().getFullYear(); // 重复定义报错
}
教训:同一作用域内变量只能声明一次;使用 const 和 let 而不是 var。
// ❌ 错误代码
let dizhi = "子丑寅卯"; // 字符串
dizhi.join("、"); // ❌ 字符串没有 join 方法
// ✅ 正确代码
let dizhi = ["子", "丑", "寅", "卯"]; // 数组
dizhi.join("、"); // ✅
教训:明确区分字符串和数组;使用 Array.isArray() 检查类型。
这是最低级但最常见的错误。使用代码编辑器的括号匹配功能,写代码时立即闭合括号和引号。
教训:修改前必须备份:cp index.html index.html.bak;使用版本控制(Git);小步修改,频繁测试。
将网站分为独立模块:八字排盘、十神分析、大运流年、样式渲染。每次只修改一个模块,测试通过后再继续。
console.log("当前年份:", currentYear);
console.error("错误信息:", error);
修改后必须 Ctrl + F5 强制刷新。
function analyzeFunction() {
// 1. 变量声明区
let currentYear = new Date().getFullYear();
let result = [];
// 2. 参数验证区
if (!input) { return { error: "输入不能为空" }; }
// 3. 主要逻辑区
// 4. 返回结果区
return { success: true, data: result };
}
给未来的自己:
代码是写给人看的,只是恰好能被机器执行。
每一次 Bug 都是成长的机会,但同样的错误不要犯第二次。
慢就是快,稳就是准。
调试的本质不是消灭错误,而是理解系统。