var first = prompt("Enter the first number");
var second = prompt("Enter the second numbers");
var number1 = parseInt(first);
var number2 = parseInt(second);
if(isNaN(number1 || number2)){
document.write("invalid, not a number");
};
为什么操作符或(||)在上面的示例中不起作用?它适用于和(和&&)运算符,但我无法理解背后的逻辑。我基本上没有告诉计算机,如果number1 或 number2不是数字打印出来的话?
演示
答案 0 :(得分:4)
分别对变量isNaN()
和first
:
second
var
first = +prompt("Enter the first number"),
second = +prompt("Enter the second numbers");
if(isNaN(first) || isNaN(second)){
alert("invalid, not a number");
}
else {
alert('Yay!');
}
详细了解isNaN
在您的示例中,您使用表达式number1 || number2
。它看起来像这样的样本:
var result = 1 || 0; // 1
var result = 0 || 44; // 44
结果你的单个isNaN将只检查你的一个输入参数:
isNaN(1 || 0) -> isNaN(1) -> false
isNaN(0 || 44) -> isNaN(44) -> false
面向对象的JavaScript - 第二版:如果JavaScript遇到非布尔表达式作为操作数 逻辑运算时,返回非布尔值作为结果。这个 行为不是你应该依赖的东西,因为它会产生代码 更难理解。
答案 1 :(得分:1)
你看,如果你使用的是||在isNaN()函数内部,或者被认为是不同的。函数结果为false,因为您的两个var之一是一个数字:
isNaN(true || false)= false
如果你这样做:
if(isNaN(number1) || isNaN(number2)){
document.write("invalid, not a number");}
然后你在isNaN中分别考虑每个var,所以如果其中一个结果为真而另一个结果为假,则if()考虑:
if(true || false)= true