无法拼接值到字符串:剪刀石头布游戏JS代码问题排查
问题分析与解决
你的代码存在两个关键问题导致功能异常:
1. 控制台打印时机错误
console.log(playerWeapon)在页面加载完成后立刻执行,此时用户还未点击任何图片,所以输出的是空字符串。而点击事件属于异步触发行为,只有用户点击后才会修改playerWeapon,但此时初始的console.log早已执行完毕,自然看不到更新后的值。
2. 赋值逻辑不符合需求
你使用playerWeapon += "xxx"的方式会将新值拼接到旧值末尾,比如连续点击两次"paper",变量会变成"paperpaper"——但实际需求应该是每次选择武器替换之前的值,而非拼接,所以应该用=直接赋值。
修正后的代码
const weapons = document.querySelectorAll("img"); let playerWeapon = ""; weapons.forEach((weapon) => { weapon.addEventListener("click", (event) => { // 直接利用元素id赋值,省去冗余的if判断 playerWeapon = weapon.id; // 将打印操作移到事件回调内,每次点击后输出最新值 console.log(playerWeapon); }); });
额外优化说明
原来的多分支if-else完全没必要,因为每个图片的id就是你需要的目标字符串,直接赋值即可让代码更简洁。如果后续需要扩展逻辑(比如和电脑对战),直接在事件回调内编写对应逻辑或调用相关函数即可。
内容的提问来源于stack exchange,提问作者Michael
相关产品推荐
相关产品推荐

