如何区分JavaScript Prompt取消操作与0/空输入的不同响应?
区分Prompt取消、空输入与输入0的解决方案
问题核心在于直接用Number()转换prompt返回值会丢失原始信息:点击取消返回的null和空输入的""都会被转成NaN,导致无法区分。要解决这个问题,需要先保留prompt的原始返回值,再分情况处理:
修改后的完整代码
// 先保存prompt的原始输入值,不直接转Number const rawInput = prompt( `Qual a sua operação hoje? 1 - Soma (+) 2 - Subtração (-) 3 - Multiplicação (*) 4 - Divisão (/) 5 - Potenciação (^) 6 - Raiz (*/) 7 - Logaritmo natural (log) 8 - Divisão inteira (resto) `, "Digite aqui!" ); // 1. 点击取消按钮的情况(rawInput为null) if (rawInput === null) { if (confirm("Quer mesmo sair?")) { window.close(); // 修正原代码中Window的大小写错误 } else { calculadora(); } } else { // 转换为数字,方便后续判断 const operacao = Number(rawInput); // 2. 输入空值或非数字内容的情况 if (isNaN(operacao)) { alert("Por Favor, digite um número válido!"); calculadora(); } // 3. 输入0的情况,触发特定提示 else if (operacao === 0) { alert("Você digitou 0, por favor escolha um número entre 1 e 8!"); calculadora(); } // 4. 输入数字不在1-8范围内的情况 else if (operacao < 1 || operacao > 8) { alert("Por favor, escolha um número que retorne uma operação!"); calculadora(); } // 5. 输入有效数字(1-8)的情况,可继续后续计算逻辑 else { console.log(`Selecionou a operação ${operacao}`); // 此处添加对应操作的计算代码 } }
关键修改点说明
- 保留
rawInput原始值,通过rawInput === null精准判断点击取消的操作。 - 用
isNaN(operacao)识别空输入或非数字内容(空字符串转Number会得到NaN)。 - 单独增加
operacao === 0的判断分支,触发输入0的专属提示。 - 修正原代码中
Window.close()的大小写错误(应为小写window)。
内容的提问来源于stack exchange,提问作者Marina de Campos
相关产品推荐
相关产品推荐

