
字节笔记本
2026年10月7日 · 约 2 分钟读完
空字符串把判题条件堵死了
每一题开始时,selectedLetters 设为 Array(word.length).fill('')。点字母时,先数非空格子。已经等于单词长度就返回。否则找到第一个空字符串的下标,把字母放进去,再 join("") 得到 newWord。
包含空字符串这项永远成立
条件是长度等于单词长度,并且 !newWord.includes('')。在这门语言里,任意字符串调用 includes('') 都得到真,因为空字符串是每个字符串的子串。前面的非因此永远是假。checkAnswer 不会执行。isCorrect 保持空。模板只在 isCorrect !== null 时显示「回答正确」或「回答错误,请重试」。用户说填完了也没有对错,就是这条条件没有通过。
长度那一半可以成立:空格子是 '',join("") 不会为它们插入字符,全部填满时长度才等于单词长度。堵死判断的是后一半。

字母按钮的灰色类看的是 selectedLetters.length >= word.length。数组一创建,长度就是单词长度,所以灰色从第一题开始就在。:disabled 写在 view 上。这层节点的点击仍绑定 selectLetter,禁用属性不会替它挡住点击。真正挡住「再填一个」的,是函数里对非空个数的判断。格子满了之后,再点字母库会直接返回。要改一个字母,得点已填的格子,走 removeLetter,把那一格设回空字符串,字母放回字母库,并把 isCorrect 设回空。
满了以后只能先删再填
答错的分支注释写着不做处理,让用户继续改。格子若已经满,字母库的点击被函数退回。不点格子上的删除,就没有空位。用户看到错误提示之后觉得不能操作,是因为满员之后的入口只剩格子上的删除。而带 includes('') 的那一版连错误提示都不会出现,因为判题没有跑。
removeLetter 只在那一格有字母时才清。空字符串是假值,点到空格不会把字母库打乱。

判题只比较拼出来的单词和答案。不要用是否包含空字符串来判断格子已满。灰色样式要数非空格子,不要用数组的长度。



