[英]switch, else if & or (Beginner Q)
我有一个 function 在与输入无关的第一个条件下似乎总是返回真。 我一直在阅读有关使用switch与else 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; }
您的代码中有几个问题:
===
,所以if (x = 1)
应该变成if (x === '1')
(因为我期望x
是一个字符串)。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)) {
y = y > 1
(或y === y > 1
)是什么意思y>1
,请参阅 switch/case 语法(互联网上到处都是文档)=
而不是===
)时,如果=
之后的值不是null
、 0
、空字符串、 false
或undefined
,则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>1
对x
进行评估没有意义,因为它询问x
是否 *equal to 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;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.