切换,否则如果 & 或 (初学者 Q)



我有一个函数,它似乎总是在与输入无关的第一个条件下返回true。我一直在阅读有关使用switch而不是其他的信息,因为我有 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)) {
  3. 不清楚你的意思是y = y > 1(或y === y > 1(在第一个if(第二个括号(
  4. 在开关/大小写语法中你不能使用y>1,请参考开关/大小写语法(互联网上全是文档(
  5. 当你把赋值放进 if (使用=而不是===( 时,if如果=后面的值不是null0、空字符串、falseundefined,请考虑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是否 *等于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;
}

最新更新