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

Node.js运行含prompt的JS代码报prompt is not defined如何解决

问题原因

alert()和prompt()是浏览器提供的BOM API,仅在浏览器运行环境中存在,不属于JavaScript原生语法的一部分,两类报错都是运行环境不支持对应API导致的:

  • 直接双击js文件时,Windows会调用自带的JScript引擎执行代码,该环境没有内置这两个API,因此抛出「对象预期」错误
  • Node.js是服务端JavaScript运行环境,同样没有内置浏览器端的BOM API,因此报错prompt is not defined
修复方案

方案1:浏览器运行(无需修改原代码)

新建HTML文件battleship.html,将原有JS代码嵌入到<script>标签内即可,代码示例如下:

<!DOCTYPE html>
<html lang="zh-CN">
<head>
  <meta charset="UTF-8">
  <title>战舰游戏</title>
</head>
<body>
  <script>
    var location1 = 3;
    var location2 = 4;
    var location3 = 5;
    var guess;
    var hits = 0;
    var guesses = 0;
    var isSunk = false;

    while (isSunk == false) {
      guess = prompt("Ready, aim, fire! (enter a number from 0-6):")
      if (guess < 0 || guess > 6) {
        alert("Please enter a valid cell number!");
      } else {
        guesses = guesses + 1;
        if (guess == location1 || guess == location2 || guess == location3) {
          alert("HIT!");
          hits = hits + 1;
          if (hits == 3) {
            isSunk = true;
            alert("You sank my battleship!");
          }
        } else {
          alert("MISS");
        }
      }
    }
    var stats = "You took " + guesses + " guesses to sink the battleship, " +
      "which means your shooting accuracy was " + (3 / guesses);
    alert(stats);
  </script>
</body>
</html>

直接用浏览器打开该HTML文件,运行效果和在线运行完全一致。

方案2:适配Node.js命令行运行

使用Node.js内置的readline模块替代浏览器API实现命令行交互,修改后的代码如下,保存为battleship.js后执行node battleship.js即可运行:

const readline = require('readline');
const rl = readline.createInterface({
  input: process.stdin,
  output: process.stdout
});

var location1 = 3;
var location2 = 4;
var location3 = 5;
var guess;
var hits = 0;
var guesses = 0;
var isSunk = false;

function startGame() {
  rl.question("Ready, aim, fire! (enter a number from 0-6):", (guessInput) => {
    guess = Number(guessInput);
    if (isNaN(guess) || guess < 0 || guess > 6) {
      console.log("Please enter a valid cell number!");
      startGame();
      return;
    }
    guesses++;
    if (guess == location1 || guess == location2 || guess == location3) {
      console.log("HIT!");
      hits++;
      if (hits == 3) {
        isSunk = true;
        console.log("You sank my battleship!");
        const stats = `You took ${guesses} guesses to sink the battleship, which means your shooting accuracy was ${3 / guesses}`;
        console.log(stats);
        rl.close();
        return;
      }
    } else {
      console.log("MISS");
    }
    startGame();
  });
}

startGame();

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.18 10:36:03