Javascript值比较说明

Javascript值比较说明,javascript,comparison,conditional-statements,Javascript,Comparison,Conditional Statements,Javascript中这两个条件语句的区别是什么 function comparisonTest() { var value = "A value"; var compare1 = 5; var compare2 = "String"; var compare3 = false; if (value == compare1 || value == compare2 || value == compare3) console.write("True"); else con

Javascript中这两个条件语句的区别是什么

function comparisonTest() {
  var value = "A value";
  var compare1 = 5;
  var compare2 = "String";
  var compare3 = false;

  if (value == compare1 || value == compare2 || value == compare3) console.write("True");
  else console.write("False");
}
这是应该的-它返回false,因为值不匹配。但是,当我将条件更改为以下内容时

function comparisonTest() {
  var value = "A value";
  var compare1 = 5;
  var compare2 = "String";
  var compare3 = false;

  if (value == compare1 || compare2 || compare3) console.write("True");
  else console.write("False");
}
它总是返回
True
。我认为可能会有一种更短的方法来编写多重比较的条件(虽然循环可以正常工作),但这显然不是一种方法

幕后发生了什么,或者更确切地说,是如何解释的,以便在第二种情况下,它总是返回真的?我声明的值中没有一个是
1
true
,因此这绝对不是问题所在。

这是因为:

if (value == compare1 || compare2 || compare3) 
与此相同:

if ((value == compare1) || compare2 || compare3)
您将看到
compare2
是一个满足
|
运算符的真实值。请参阅,了解为什么首先对
==
求值,这会使第一个代码块工作,但会使第二个代码块像我所示那样求值


如果要将它们与
进行比较,必须像在第一个代码块中那样,将它们分别与
进行比较


您可能还希望更频繁地使用
==
,这样您就不必担心可能的类型转换会使您从未想过的内容相等。我在自己的编码中有一个指导原则,可以一直使用
==
==除非有明确的原因需要类型转换。我相信这可以避免一些意外的错误。有关更多信息,请参阅。

这是因为:

if (value == compare1 || compare2 || compare3) 
与此相同:

if ((value == compare1) || compare2 || compare3)
您将看到
compare2
是一个满足
|
运算符的真实值。请参阅,了解为什么首先对
==
求值,这会使第一个代码块工作,但会使第二个代码块像我所示那样求值


如果要将它们与
进行比较,必须像在第一个代码块中那样,将它们分别与
进行比较



您可能还希望更频繁地使用
==
,这样您就不必担心可能的类型转换会使您从未想过的内容相等。我在自己的编码中有一个指导原则,可以一直使用
==
==除非有明确的原因需要类型转换。我相信这可以避免一些意外的错误。请参阅以获取更多信息。

不幸的是,我不认为有一种用JavaScript编写条件语句的捷径

第二个示例返回true的原因是,当您计算
compare2
时,这是JavaScript中的
truthy

我建议您在JavaScript中使用truthy和false值


顺便说一句,您可能想看看JavaScript中的
==
==
之间的区别。不幸的是,我不认为有一种简单的方法可以用JavaScript编写条件语句

第二个示例返回true的原因是,当您计算
compare2
时,这是JavaScript中的
truthy

我建议您在JavaScript中使用truthy和false值


另一方面,您可能希望了解JavaScript中
==
==
之间的区别,这里是另一个选项:

function comparisonTest() {
  var value = "A value";

  var answers = [5, "String", false];

  /* IE may requires shim found here:
     https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/indexOf
  */
  if (answers.indexOf(value) === -1) {
    // False
  } else {
    // True
  }
}

这是另一个选择:

function comparisonTest() {
  var value = "A value";

  var answers = [5, "String", false];

  /* IE may requires shim found here:
     https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/indexOf
  */
  if (answers.indexOf(value) === -1) {
    // False
  } else {
    // True
  }
}

这是一个逻辑运算符。你不能那样做。这个问题实际上与| |运算符相邻,而不是相等。这是一个逻辑运算符。你不能那样做。这个问题实际上是关于| |运算符的,而不是平等的。我很快就会接受这个答案——谢谢你的参考;我不知道Javascript中有
truthy
false
值。。。这很有趣,我在使用Javascript时会记住这一点!我接受@jfriend00的答案,因为你给了我一个参考,实际上解释了这些值是什么以及它们的含义;我不知道Javascript中有
truthy
false
值。。。这很有趣,我在使用Javascript时会记住这一点!我接受@jfriend00的答案,因为您给了我一个参考,它实际上解释了值是什么以及它们的含义。感谢您对编译器如何解释它的第二个条件进行了评估-我想知道它是如何确定要评估的内容的。另外,我感谢您指出
===
的使用,但是我知道类型转换在本例中不是问题。同样,我已经读过这个问题,但还是要感谢你把它链接起来@chriscifice-你可能会发现这篇关于javascript中运算符优先级的文章很有用:这里选择相等运算符是不相关的。@RobG-是的,我知道-当它们混合类型时,这只是一个一般的“良好编码”建议。Hmmm,“良好编码”。如果
'5'!=5
是必需的,程序员最好确定。但这种讨论已经在其他地方进行了感谢您对编译器如何解释第二个条件的求值——我想知道它是如何决定要求值的内容的。另外,我感谢您指出
===
的使用,但是我知道类型转换在本例中不是问题。同样,我已经读过这个问题,但还是要感谢你把它链接起来@chriscifice-你可能会发现这篇关于javascript中运算符优先级的文章很有用:这里选择相等运算符是不相关的。@RobG-是的,我知道-当它们混合类型时,这只是一个一般的“良好编码”建议。Hmmm,“良好编码”。我从来没有