逻辑运算符混淆

Logical operators confusion

本文关键字:逻辑运算符      更新时间:2023-09-26
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");
};

为什么运算符或 (||( 在上面的例子中不起作用?它适用于 and (&&( 运算符,但我无法理解背后的逻辑。我不是基本上告诉计算机,如果数字 1 数字 2 不是数字,请打印这个吗?

演示在这里

https://jsfiddle.net/tc3mhL1u/

分别对变量firstsecond使用 isNaN()

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遇到非布尔表达式作为操作数 逻辑运算,结果返回非布尔值。这 行为不是你应该依赖的东西,因为它使代码 更难理解。

你看,如果你在isNaN((函数中使用||,or被认为是不同的。函数结果为 false,因为您的两个变量中的一个是一个数字:

isNaN(true || false( = false

如果你这样做:

if(isNaN(number1) || isNaN(number2)){
    document.write("invalid, not a number");}

然后你在isNaN中分别考虑每个var,所以如果其中一个结果是真的,另一个是假的,if((考虑:

if(true || false( = true