繁体   English   中英

switch, else if & or (初学者Q)

[英]switch, else if & or (Beginner Q)

我有一个 function 在与输入无关的第一个条件下似乎总是返回真。 我一直在阅读有关使用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; }

您的代码中有几个问题:

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

您的代码中有一些问题:

  • 您使用=而不是=====来检查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 > 1部分几乎肯定没有做你想做的事。那是在问“y 和 y > 1 是一样的吗?”)

在您的switch中,将每种case的值视为您要放入其中的内容的占位符。 因此,在您的示例中,使用y>1x进行评估没有意义,因为它询问x是否 *equal to y>1 ,但y>1始终为truefalse并且独立于x

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

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;
  }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM