You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JS计算器点击等号报Invalid left-hand side in assignment错误如何解决

错误触发原因
  • 你给所有button元素都绑定了通用点击事件,点击时会把按钮的文本内容追加到score.textContent里,包含等号按钮。点击等号时会先触发这个通用事件,把等号文本追加到表达式末尾,再触发等号的专属点击事件调用eval。此时传入eval的字符串类似1+1=,属于不合法的JS表达式,相当于尝试给表达式的计算结果赋值,没有合法的左操作数,就会抛出「Invalid left-hand side in assignment」错误。
  • 乘法按钮用的文本是x,不是JS识别的乘法运算符*,就算解决了等号追加的问题,遇到乘法运算也会报错。
解决方法
  1. 修改通用点击事件逻辑,排除等号按钮,不要把等号文本追加到表达式里
  2. 调用eval之前,把表达式里的x替换为JS可识别的*
  3. 可选优化:追加内容前增加合法性校验,避免重复追加运算符、小数点等异常情况
修正后的JS代码
let knopkes = document.querySelectorAll(`button`);
let score = document.querySelector(`#score`)
let equal = knopkes[15];

knopkes.forEach(el =>{
    el.addEventListener(`click`,()=>{
        // 排除等号按钮,不追加等号文本,同时去掉按钮文本自带的空格
        if(el !== equal){
            score.textContent += el.textContent.trim();
        }
    })
})

equal.addEventListener(`click`,()=>{
    // 把乘号x替换为JS识别的*后再执行计算
    let expression = score.textContent.replace(/x/g, '*');
    score.textContent = eval(expression);
    // 如果担心eval安全问题,也可以用你注释里的Function写法,效果一致:
    // score.textContent = new Function('return ' + expression)();
})

内容的提问来源于stack exchange,提问作者John

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 00:36:04