我尝试写一行if..elseif..else
语句但总是在else if
。
var x = "192.168.1.1";
x = x == ("google.com") ? ("true google.com") : (("yahoo.com") ? ("true yahoo.com") : ("192.168.1.1"));
console.log(x);

我有什么遗失的吗?为什么总是进入else if
?
答案 0 :(得分:5)
您错过了'sfeafxegwa' is not recognized as an internal or external command,
operable program or batch file.
声明
x == (""yahoo.com"")

但var x = "192.168.1.1";
x = (x == "google.com") ?
"true google.com" :
(x == "yahoo.com") ?
"true yahoo.com" :
"192.168.1.1";
// --------------------------------------------^^^^^^^^^^^^^^^^------------------------------------
console.log(x);
语句更具可读性。如果它会降低可读性,请不要使代码简洁。
答案 1 :(得分:0)
这不回答问题
为什么它总是进入
else if
?
但它有助于
我有什么遗失的吗?
是的,你错误地说明了进一步使用和明确的模式,如何获得给定字符串的另一个字符串。
您可以使用一个易于维护键控值的对象。
values = { "google.com": "true google.com", "yahoo.com": "true yahoo.com", default : "192.168.1.1" };
该调用使用默认运算符||
(逻辑OR):
x = values[x] || values.default;
var x = "192.168.1.1",
values = {
"google.com": "true google.com",
"yahoo.com": "true yahoo.com",
default : "192.168.1.1"
};
x = values[x] || values.default;
console.log(x);

答案 2 :(得分:0)
你的三元手术
x = x == ("google.com") ? ("true google.com") : (("yahoo.com") ? ("true yahoo.com") : ("192.168.1.1"));
可以被认为是if-else if-else
块,如下所示:
if(x == ("google.com")) {
x = "true google.com";
}
else {
if("yahoo.com") {
x = "true yahoo.com"; //Always true since it is a non-empty string
}
else {
x = "192.168.1.1"
}
}
因此,由于您要将x初始化为" 192.168.1.1",它显然不等于第一个条件中指定的字符串(" google.com")({ {1}}阻止)。因此,它转移到else块并评估if
块内的if
条件。这个else
块只会检查一个字符串文字" yahoo.com"是空的。由于它不是空的,因此满足条件。
出于您的目的,您需要将其从if
更改为if("yahoo.com")
。但是,一旦进行了此更改,它将始终转到else块,因为前两个条件永远不会满足。