当前位置: 首页 > 知识库问答 >
问题:

为什么它总是返回真值?

彭宏深
2023-03-14

初学者问题,很抱歉,如果这不是一个合适的地方,请尝试学习在JS中逻辑是如何工作的,我无法理解这一点

if (firstSymbol === "A" || "a" || "D" || "d") {
    if (secondSymbol === "z") {
        alert("It does!"); 
        break;
    }
}

我希望它会说“是的!”如果firstSymbol是A、A、D或D,而secondSymbol是z,但出于某种原因,它会说“是的!”无论第一个符号是什么,都会断开,并且只检查第二个符号是否为z。

共有3个答案

白吕恭
2023-03-14

在Javascript中有一种叫做truthyfalsy值的东西。总之,是一个值在布尔(truefalse)上下文中的计算方式。

所有值都是真实的,除非它们被定义为false sy(即,除了false、0、“”、null、未定义和NaN)。

在代码中,当您编写:

if (firstSymbol === "A" || "a" || "D" || "d")

您正在检查4个布尔条件:

  1. firstSymbol==="A"-结果将取决于firstSymbol
  2. "a"-将始终求值为true
  3. "D"-将始终求值为true
  4. "d"-将始终求值为true

因此,由于条件2、3和4始终为true,因此您的代码将始终输入if语句。如果其中哪怕只有一个是真的,行为都是一样的。

你可以用一些方法重写它:

if (firstSymbol === "A" || firstSymbol === "a" || firstSymbol === "D" || firstSymbol === "d")

if (["A", "a", "D", "d"].indexOf(firstSymbol) > -1)

if (["A", "D"].indexOf(firstSymbol.toUpperCase()) > -1)
雍焱
2023-03-14
function matchSecondSymbol(firstSymbol, secondSymbol) {
  // By making FirstSymbol Uppercase, we can remove the other two conditions
  firstSymbol = firstSymbol.toUpperCase();
  if (['A', 'D'].includes(firstSymbol) && secondSymbol === "z") {
      console.log('it Does');
  }
  else {
      console.log('it does not');
  }
}

matchSecondSymbol('a', 'z');
matchSecondSymbol('z', 'z');
matchSecondSymbol('a', 'y');
阚英武
2023-03-14

因为您正在检查"a"是否为真-它始终为真:

console.log(!!"a");
 类似资料:
  • 问题内容: 我有以下代码。应该返回表的最后一行的mysqli_insert_id()(在本例中为“ $ last_row”)始终返回0。为什么会这样呢? 问题答案: 并 没有 返回表的最后一排的ID。从文档中,它: …返回由查询产生的ID,该查询是对具有具有AUTO_INCREMENT属性的列的表进行的。如果最后一个查询不是or 语句,或者如果修改后的表没有带有属性的列,则此函数 将返回零 。 (

  • 问题内容: 我找到了JavaDoc的方法: 返回:如果此线程已被中断,则返回true;否则返回false。 否则为假。 我对这种方法的理解有误。此外,我可能会误解Thread中的“中断”概念。 欢迎任何解释!谢谢! 程式码片段: 在线程定义中: 调用: 问题答案: 引发异常后,线程不再处于中断状态。

  • 问题内容: 我一直在获取要使用mysqli返回的行数方面遇到麻烦。即使确实有一些结果,我每次都会得到0。 为什么没有显示正确的数字? 问题答案: 您需要先调用num_rows查找: 请参阅文档,该文档显示在页面顶部附近(在主要说明区域中)…

  • 在.NET Framework 4.5中,由Trim()方法调用的专用TrimHelper()方法使用以下条件来确定是否需要修剪字符:(由.NET Reflector反编译的代码) 我想知道为什么IsBOMWhitesspace方法总是返回false?? 这是微软计划在未来改变/扩展的吗?例如,通过检查char是否为‘u efff’并在这种情况下返回true?

  • 问题内容: 在CSS中定义时,总是返回空。 但是,如果您在该元素中设置样式,则可以获取style.display详细信息。 我的问题不同。 内联样式不是编码的好方法。因此,我们总是在CSS中分配样式。但是,为什么在提供style属性而不是通过element 时却显示为空?JavaScript是否特别无法读取style属性? 您可以在下面检查,即使我提供了,所有样式属性都为空。 为什么? 问题答案:

  • 问题内容: 我正在尝试一个需要Facebook用户提供一些信息的网站,正在使用PHP和JS SDK。 我在PHP中有一个功能: 在一个类中,该类包含来自SDK的facebook对象。 然后在一个块上,我这样做: FB JS环境已正确设置(我认为),因此可以正常工作。因此,用户会弹出窗口并授权该站点。 问题是即使用户授权了该应用程序之后,$ user也始终为0,这意味着始终返回0,然后列出用户(包括