比较' prompt '的返回值和number的' if '语句永远不会执行
`if` statement comparing return value of `prompt` to number is never executed
我正在编写一款游戏,我遇到了这样的问题:最后一个if
语句(以及它的所有else if
语句)从未执行过。
下面是不能工作的代码:
const compare = prompt("1.mars, 2.jupiter, 3.moon")
if (compare === 2) {
confirm("your airplane crashed and you died")
} else if (compare === 1) {
confirm("you arrived safely")
} else if (compare === 3) {
confirm("you survived an airplane crash but you need to escape")
}
正如@Binkan Salaryman非常准确地指出的那样,prompt返回一个字符串('1','2'等)。
使用==
来比较未类型化的值,如compare==2
,或与正确的类型进行比较,如compare==='2'
使用相等运算符(==
)代替严格相等运算符(===
)。对于===
,只有当两个操作数的类型相同时,比较才返回true。在您的示例中,prompt的结果返回string,而
compareInt === 2; // '2' === 2
返回false
,因为您正在检查字符串和数字是否相同。
'2' === 2 returns false as type checking is also done
'2' == 2 returns true as no type checking
我做了一个小演示。稍微重构一下你的代码。演示
一些人指出的主要问题是,即使你写了一个number
, prompt
也会返回一个string
。
您需要使用parseInt()
函数将此字符串转换为int
。
if(jack === 'yes'){
var compare = parseInt(prompt("1.mars, 2.jupiter, 3.moon"));
switch(compare){
case 2: confirm("your airplane crashed and you died")
break;
case 1: confirm("you arrived safely")
break;
case 3: confirm("you survived an airplane crash but you need to escape")
break;
default:
confirm("An error occured");
}
}
尝试:
compareInt = parseInt(compare)
,最终代码如下:
var compare = prompt ("1.mars,2.jupiter,3.moon")
var compareInt = parseInt(compare);
if (compareInt===2) {confirm ("your airplane crashed and you died")}
else if (compareInt===1) {confirm ("you arrived safely")}
else if (compareInt===3){
confirm("you survived an airplane crash but you need to escape")}
对于您的代码,您不需要严格检查===,您可以使用与==
的简单比较- 因为===将比较两者的类型以及值
- 而==只比较 的值
相关文章:
- 无法在通过jQuery的ajax加载的页面中执行javascript
- JavaScript执行暂时挂起页面
- 如何在ReactJS JSX中执行嵌套的if-else语句
- 当js函数's已执行
- 哪个先执行
- 在使用Polymer'加载所有json文件后执行方法;s的核心ajax
- HTML表单提交时未执行外部函数
- 在Safari执行javascript之前对其进行修改
- Amd,希望确保某个东西总是最后执行
- 在Windows 10中自动执行例行程序(主要与浏览器交互)
- 递归使用 eval() 是检查程序执行的好方法吗?
- 如何做到这一点,使代码在不传递条件后执行函数
- 如何在执行此特定onclick事件时执行JavaScript函数
- 执行跨域 JavaScript 永远不会命中 .done 中的代码
- 反向地理编码:将GPS坐标转换为位置名称的函数调用永远不会执行
- 使用超测运行Mocha测试时,Express路由永远不会执行
- 代码永远不会执行,不会得到任何错误
- 比较' prompt '的返回值和number的' if '语句永远不会执行
- Angular JS - 我的控制器功能在执行我的服务脚本后永远不会返回
- 解析嵌套查询:内部查询永远不会执行