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

JavaScript中逻辑运算符&&无法正常工作的问题排查

问题原因及修复方案

你的问题核心是**prompt()返回的是字符串类型,而你用松散相等==和数字比较时,可能发生意外的隐式类型转换**,另外还有一处变量未定义的问题,具体如下:

1. 逻辑判断失效的根本原因

prompt()函数的返回值始终是字符串(用户点击取消时返回null),当你用==和数字比较时,JavaScript会自动尝试类型转换,但这种转换可能不符合预期:

  • 比如如果用户在question3中输入了可被转换成数字3的内容(比如字符串"3"),会导致obj.question3==3为true,从而触发整个条件;
  • 更严谨的做法是统一类型后再做判断,要么把输入转换成数字,要么用严格相等===(要求类型和值都匹配)。

2. 修复后的代码

function getRandom() {
  let text = "Answer";
  // 将prompt返回的字符串转为数字,无法转换时得到NaN
  const obj = {
    question1: Number(prompt('How many Stars are there in our solar system?', text)),
    question2: Number(prompt('How many Moon does Mars have?', text)),
    question3: Number(prompt('How many Moons do we have?', text)),
  };
  // 使用严格相等===,避免隐式类型转换
  if (((obj.question1 === 1) && (obj.question2 === 2)) || (obj.question3 === 3)) {
    const oldVal = 'Name';
    const name = prompt("Write your name:", oldVal);
    // 补全value变量定义(原代码中未定义)
    const value = 1000000; // 示例金额,可根据需求修改
    if (name === "") { }
    else if (name === oldVal) { }
    else if (name) {
      alert(`Congrats ${name}!!! You just won ${value}$🎉🥳`);
    }
    else {
      alert("You just missed the golden chance to become a billionaire😮");
    }
  }
  else {
    alert("Sorry");
  }
}

3. 关键修复点

  • 将prompt()的返回值用Number()转为数字类型,确保和判断的数字类型一致;
  • 把松散相等==替换为严格相等===,杜绝隐式类型转换带来的意外;
  • 补全了原代码中未定义的value变量,避免弹窗时出现报错。

内容的提问来源于stack exchange,提问作者Muhammad Umer Farooq

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 17:48:20