如何调整if条件,避免关闭prompt或空输入时误触发0的输出
解决方案
要在不修改第一行代码的前提下区分用户输入0、关闭弹窗或空输入的情况,可以通过提前拦截prompt函数的返回值来实现:
// 新增前置代码,保存prompt的原始返回值 let promptResult; const originalPrompt = window.prompt; window.prompt = function(msg) { promptResult = originalPrompt(msg); return promptResult; }; // 你的原代码,未做任何修改 let chooseANumber = Number(prompt('Choose a number')); // 修改后的判断条件 if (chooseANumber === 0 && promptResult === '0') { console.log(0); } // 可选:恢复原始prompt函数,避免影响后续代码 window.prompt = originalPrompt;
原理说明
- 先重写全局
prompt函数,让它在被调用时把原始返回值存到promptResult变量里 - 原第一行执行时,调用的是重写后的
prompt,因此promptResult会记录用户的真实输入(或关闭弹窗时的null) - 最后判断时,除了检查
chooseANumber === 0,还额外验证原始输入是字符串"0",这样就排除了关闭弹窗(promptResult为null)和空输入(promptResult为"")的情况
如果不想污染全局变量,也可以用立即执行函数封装逻辑:
(function() { let promptResult; const originalPrompt = window.prompt; window.prompt = function(msg) { promptResult = originalPrompt(msg); return promptResult; }; // 原代码 let chooseANumber = Number(prompt('Choose a number')); if (chooseANumber === 0 && promptResult === '0') { console.log(0); } window.prompt = originalPrompt; })();
内容的提问来源于stack exchange,提问作者kapil choudhary
相关产品推荐
相关产品推荐

