if (lookfor.done == '1') {
lookfor.done = '0';
} else if (lookfor.done == '0'){
lookfor.done = '1';
}
我如何在javascript中写一个更清晰的上述简写?
答案 0 :(得分:10)
您可以使用ternary operator:
lookfor.done = (lookfor.done == '1') ? '0' : '1';
(不考虑既不是'1'
也不是'0'
的值。如果你需要那些,你的双if
可能是最好的解决方案)
如果你使用实际的整数而不是字符串,你可以使用按位XOR速记赋值:
lookfor.done = 0/1;
lookfor.done ^= 1;
如果你需要琴弦,你仍然可以通过使用一些难以理解的魔法来缩短:
lookfor.done = +!+lookfor.done+""; // cast: number, boolean flip, number, string
也许更干净:
lookfor.done = String(1^lookfor.done); // XOR flip automatically casts to number
答案 1 :(得分:1)
完全干净的解决方案:
lookfor.done = +!+lookfor.done+"";
每个人都会知道你的意思。
但是真的。带花括号的if语句的默认语法完全没问题。如果我说没有"清洁"溶液
代码说明,因为有人要求:
首先,+
之前的lookfor
将值转换为数字。然后,!
否定它(!1 = false,!0 = true)。之前的+
会将结果强制转换为数字(true => 1,false => 0)。 +""
附加一个空字符串并将值强制转换回字符串。
注意:实际上不要使用它。如初。强>
答案 2 :(得分:0)
lookfor.done = lookfor.done == '1' ? '0' : '1';
答案 3 :(得分:0)
使用这个简写:
lookfor.done =lookfor.done == '0' ? '1':'0'
但boolean
会更加清晰:
lookfor.done=true;
lookfor.done=!lookfor.done;
答案 4 :(得分:0)
您正在寻找的是三元语句,它有多种语言版本。
lookfor.done === '1' ? lookfor.done = '0' : lookfor.done = '1';
当它不等于任何时候你应该有一个后备......但为什么不在这里使用布尔?如果你这样做,你可以简单地否定这样的价值:
lookfor.done = !lookfor.done;
这看起来就像你实际做的那样。
答案 5 :(得分:0)
考虑到它不是1
或0
的情况:
lookfor.done = (lookfor.done == '1') ? '0' : (lookfor.done == '0') ? '1' : lookfor.done;
但看起来很难看。
答案 6 :(得分:0)
您可以使用unary
运算符+
。
var lookfor.done = !!your_value_here;
lookfor.done = !lookfor.done;
lookfor.done = +lookfor.done;
它的作用是将值integer
变为boolean
并将其转换为!!
。
然后切换boolean
值。
然后再次将其解析为integer
。
答案 7 :(得分:0)
我不是一个代码高尔夫球手,但是使用三元运算符,我得到了这个:
lookfor.done = lookfor.done * 1 ? '0' : '1';
lookfor.done * 1
将您的字符串转换为数字:0表示“0”,1表示“1”,但它也适用于其他数字。然后,三元运算符将其评估为布尔值(false
表示0,true
表示其他任何内容)并设置适当的值,并按照您的要求将其分配回lookfor.done
。< / p>
但我不得不怀疑:这是否比if
声明更清晰?它将分配,而不是基于lookfor.done
是'1'还是'0',而是基于它是否转换为数字等于零。严格来说,这与你在问题中所做的不一样,尽管它可能满足你的需求。
答案 8 :(得分:0)
您可以使用异或(XOR)操作(尽管JavaScript只有按位运算符)
lookfor.done = lookfor.done ^ 1