有没有办法使用一个JavaScript在两个字符串之间切换?

Boj*_*les 13 javascript jquery logic

我想做点什么

if(something.val() == 'string1')
{
     something.val('string2');
}
else if(something.val() == 'string2')
{
    something.val('string1')
}
Run Code Online (Sandbox Code Playgroud)

但是在一行代码中.我不记得它是如何完成的,但它涉及问号和冒号......

Mat*_*ela 29

尝试:

something.val(something.val() == 'string1' ? 'string2' : 'string1');
Run Code Online (Sandbox Code Playgroud)

它被称为三元表达式.

  • 但即使值为`string3`,这也将设置`string1`,而不仅仅是`string2` (6认同)

Cri*_*hez 7

看马云,没有三元运营商!

以下是有效的,因为Javascript短路布尔表达式.

如果something == string1然后评估string2- 因为string2是一个真正的值而下一个表达式涉及OR操作,则不需要继续.停下来然后回来string2.

如果something !== string1那么它将跳过下一个操作数,因为如果它为假,则评估下一个操作数(使用AND)没有意义.它将"跳转"到OR操作并返回string1.

function toggleString(something, string1, string2) {
   return something == string1 && string2 || string1;
}

something.val(toggleString(something.val(), "string1", "string2"));
Run Code Online (Sandbox Code Playgroud)

如果你想完成任务:

function toggleValue(something, string1, string2) {
   something.val(something.val() == string1 && string2 || string1);
}

toggleValue(something, "string1", "string2"); // something is a jQuery collection
Run Code Online (Sandbox Code Playgroud)

但最后,我最终会使用三元运算符,因为其他程序员可能不清楚这个解决方案.如果你来自Java或其他语言,你可能希望函数返回一个布尔值,因为所有的布尔运算符.


kol*_*al7 5

另一种使用对象属性的方法:

{ 'string1': 'string2', 'string2': 'string1' }[value]
Run Code Online (Sandbox Code Playgroud)

如问题所示:

something.val(
  { 'string1': 'string2', 'string2': 'string1' }[something.val()]
)
Run Code Online (Sandbox Code Playgroud)