我有一个函数,它似乎总是在与输入无关的第一个条件下返回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;
}
代码中有几个问题:
- 在javascript中,要比较2个数字(或字符串(,您必须使用语法
===
,因此if (x = 1)
应该成为if (x === '1')
(正如我所期望的那样x
是一个字符串(。 if
条件应在括号中:if (x = 1) || (y = y > 1 && y < 280) {
=>if ((x === 1) || (y === y > 1 && y < 280)) {
- 不清楚你的意思是
y = y > 1
(或y === y > 1
(在第一个if(第二个括号( - 在开关/大小写语法中你不能使用
y>1
,请参考开关/大小写语法(互联网上全是文档( - 当你把赋值放进 if (使用
=
而不是===
( 时,if
如果=
后面的值不是null
、0
、空字符串、false
或undefined
,请考虑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>1
对x
进行评估是没有意义的,因为它询问x
是否 *等于y>1
,但y>1
总是true
或false
并且独立于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;
}