【问题标题】:switch, else if & or (Beginner Q)switch, else if & or (初学者Q)
【发布时间】:2020-06-25 16:19:37
【问题描述】:

我有一个函数,它似乎总是在与输入无关的第一个条件下返回 true。我一直在阅读有关使用 switchelse if 的信息,因为我有 16 个条件要检查,并且我想确保我有“最佳实践”

我可以同时使用这两个选项吗:

function lsaupdateTotals() {
  var x = variablename.value;
  var y = variablename2.value;


  if (x = 1) || (y = y > 1 && y < 280) {
      rdlsa = 7.45;
    } else if (x = 2 || (y = y > 281 && y < 460)) {
      rdlsa = 11.65;

      / or switch: /

      switch (x) {
        case 1:
        case y > 1:
        case y < 280:
          y = 7.45;
          break;
      }

【问题讨论】:

  • 您似乎误用了switch,请尝试在这方面检查 MDN 参考

标签: javascript if-statement switch-statement


【解决方案1】:

你的代码有几个问题:

  1. 在 javascript 中,要比较 2 个数字(或字符串),您必须使用语法 ===,所以 if (x = 1) 应该变成 if (x === '1')(因为我期望 x 是一个字符串)。
  2. if 条件应放在括号中:if (x = 1) || (y = y &gt; 1 &amp;&amp; y &lt; 280) { => if ((x === 1) || (y === y &gt; 1 &amp;&amp; y &lt; 280)) {
  3. 不清楚第一个 if(第二个括号)中的 y = y &gt; 1(或 y === y &gt; 1)是什么意思
  4. 在 switch/case 语法中不能使用y&gt;1,请参考 switch/case 语法(互联网上到处都是文档)
  5. 当您将赋值放入 if(使用 = 而不是 ===if 语句中时,如果 = 之后的值不是 null0,则考虑 true 条件,空字符串,falseundefined,因此当您编写 if(x=1){ 时,条件始终为 true

【讨论】:

  • 您可以在 case 中使用 y&gt;1 之类的东西,因为在与 x 进行比较之前,它将被评估为 truefalse
  • 是的,但是你需要switch (true)而不是switch (x),并且需要case x === 1而不是case 1才能有一个有意义的逻辑。
【解决方案2】:

您的代码中存在一些问题:

  • 您使用= 而不是===== 来检查if 语句中的相等性。单个= 符号总是 表示“设置为等于”,而不是“等于?”。
  • 在您的if 声明中,您的括号会使事情变得有点模棱两可。这可能工作得很好,但是将整个问题包装在括号中可以保证按预期工作,同时也完全清楚。

根据上述重写您的if 语句:

  if (x == 1 || (y == y > 1 && y < 280)) {
    rdlsa = 7.45;
  }
  else if (x == 2 || (y == y > 281 && y < 460)) {
    rdlsa = 11.65;
  }

(编辑:请注意,y == y &gt; 1 部分几乎肯定没有按照您的意愿行事。那是在问“y 和 y > 1 是一样的吗?”)

在您的switch 中,将每个case 中的值视为您所投入内容的占位符。所以在你的例子中,使用y&gt;1x 进行评估没有意义,因为它询问x 是否*等于y&gt;1,但y&gt;1 始终是truefalse 和独立于x

【讨论】:

  • 这真的为我澄清了这一点,我将测试这些更正。非常感谢。
  • 在你比较 y 的 if 条件下,它应该是 (y > 1) 只有 (y== y>1) 对我来说没有意义。
  • @MinalShah 同意!
【解决方案3】:

你弄错了条件。 请用以下几行替换您的代码

function lsaupdateTotals() {
var x = variablename.value;
var y = variablename2.value;


if ((x == 1) || (y > 1 && y < 280)) {
  rdlsa = 7.45;
  } else if ((x == 2) || (y > 281 && y < 460)) {
  rdlsa = 11.65;
 }

  / or switch: /

  switch (x) {
    case 1:
    case y > 1:
    case y < 280:
      y = 7.45;
      break;
  }

【讨论】:

  • 此解决方案仍然包含使用单= 而不是双或三= 进行相等检查的错误。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-08-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-11-16
相关资源
最近更新 更多