为什么do while代码在Chrome调试器正常,在jsbin却运行异常?
问题排查结论
你的代码本身逻辑没有问题,该异常表现完全是jsbin平台的内置安全限制机制导致的。
具体原因
- jsbin作为在线代码运行平台,为了避免用户编写的包含
alert/prompt/confirm等阻塞式弹窗的死循环代码,导致浏览器标签页完全卡死、用户无法正常操作关闭页面,默认会对重复弹出的阻塞式弹窗做拦截处理:通常仅允许第一次弹窗正常渲染,后续触发的同类弹窗会被平台直接静默拦截,不会展示给用户。 - 你编写的do-while逻辑刚好触发了这个限制:当你第一次输入无效内容后,循环逻辑会触发第二次prompt弹窗,直接被jsbin的拦截规则拦下,因此不会重复弹出提示框,看起来就像循环没有生效一样。
验证方法
你可以在代码中加入一行打印语句验证该结论:
do { var choice = parseInt(prompt("Please select one of the following:\n1.ROCK\n2.PAPER\n3.SCISSORS\n[NOTE: Choose your selection by pressing a number between 1,2 or 3.]")); console.log('当前输入解析结果:', choice) // 新增打印语句 } while (isNaN(choice));
输入无效内容后打开浏览器控制台查看,会发现循环实际上在正常执行,只是后续的prompt弹窗被平台拦截没有渲染出来。
测试建议
如果需要在jsbin平台正常测试这段逻辑,可以使用平台提供的自定义输入组件替代原生prompt,或者临时修改逻辑用控制台输入模拟用户输入即可。
内容的提问来源于stack exchange,提问作者CamelCaseDev
相关产品推荐
相关产品推荐

