Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/sharepoint/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 逻辑运算符混淆_Javascript - Fatal编程技术网

Javascript 逻辑运算符混淆

Javascript 逻辑运算符混淆,javascript,Javascript,为什么运算符或(| |)在上面的示例中不起作用?它与and(&&)运算符一起工作,但我无法理解其背后的逻辑。我不是在告诉计算机,如果1号或2号不是数字,就打印这个吗 这里演示 对于变量第一个和第二个,分别使用isNaN(): var first = prompt("Enter the first number"); var second = prompt("Enter the second numbers"); var number1 = parseInt(first); var number

为什么运算符或(| |)在上面的示例中不起作用?它与and(&&)运算符一起工作,但我无法理解其背后的逻辑。我不是在告诉计算机,如果1号或2号不是数字,就打印这个吗

这里演示

对于变量
第一个
第二个
,分别使用
isNaN()

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
。看起来像这样的示例:

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将只检查一个输入参数:

var result = 1 || 0; // 1

var result = 0 || 44; // 44
面向对象JavaScript-第二版:如果JavaScript在 逻辑运算,结果返回非布尔值。这 行为不是你应该依赖的东西,因为它是代码的基础 更难理解


您可以看到,如果在isNaN()函数中使用| |,则对or的考虑是不同的。函数结果为false,因为两个变量中的一个是数字:

isNaN(真| |假)=假

如果您改为这样做:

isNaN(1 || 0) -> isNaN(1) -> false

isNaN(0 || 44) -> isNaN(44) -> false

你在ISNN中单独考虑每个var,因此如果其中一个结果为真,另一个为false,则()考虑:

如果(真| |假)=真


是的,你告诉计算机如果
number1
(或者,如果
number1
是错误的,
number2
)不是数字,那么打印一些东西。当然,这不是你想要的。谢谢你,这个解决方案很清楚,也很简单,谢谢你的链接。我只是不明白为什么它与&&运算符一起工作,如果两个值都为true,那么不应该打印true?true&&true--true这两个值都不是数字,因此if将激活。但是如果你把一个数字和一个字符串作为值false&&true--false,它不应该打印,但是if仍然被激活。@DimitrisXydas,让我们用一个例子:
isNaN(4&&3)
4&&3
->
3
,所以
isNaN(3)
false
。正如您所看到的,
&
操作符也有问题。它没有按预期工作。“但是,如果您输入一个数字和一个字符串“->,您的脚本将无法捕捉这种情况,因为您使用的是
parseInt
函数。”。它将返回一个原始数字数据或一个NaN(但永远不会是字符串)@AliMamedov非常感谢您花了这么多时间来讲述这一切,我现在理解了它,并感谢您将来将不得不阅读的书名!谢谢,这解释了很多。
if(isNaN(number1) || isNaN(number2)){
    document.write("invalid, not a number");}