逻辑运营商的困惑

时间:2016-05-02 15:08:19

标签: javascript

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不是数字打印出来的话?

演示

https://jsfiddle.net/tc3mhL1u/

2 个答案:

答案 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