我想为javascript中的变量赋值
var a = b || c; //however if b > 200 choose c
有没有一种简单的方法可以做到这一点?
var a = (b && b <= 200) ? b : c;
感谢您提供任何提示或建议。只是想尽可能干净地写这个。
我想为javascript中的变量赋值
var a = b || c; //however if b > 200 choose c
有没有一种简单的方法可以做到这一点?
var a = (b && b <= 200) ? b : c;
感谢您提供任何提示或建议。只是想尽可能干净地写这个。
var a = b;
if(b == undefined || b > 200){
a = c;
}
您可以进一步简化它:
var a = b<=200 && b || c;
或者,更具可读性,
var a = ( b<=200 && b ) || c;
解释:
&&
获取第一个虚假值,或者,如果没有,则获取最后一个真正的值。||
来获得第一个真正的价值,或者,如果没有,则获得最后一个虚假的价值。所以:
如果b
是假的
那么,b<=200 && b
是假的,所以b<=200 && b || c
给出c
如果b
是真的
如果b<=200
然后,b<=200 && b
给了b
,这确实是,所以也b<=200 && b || c
给b
了。
如果b>200
然后,b<=200 && b
给false
,这是假的,所以b<=200 && b || c
给c
。
一些测试:
100<=200 && 100 || 50 // 100, because 100 is truly and 100<=200
150<=200 && 150 || 50 // 150, because 150 is truly and 150<=200
'150'<=200 && '150' || 50 // '150', because '150' is truly and 150<=200
300<=200 && 300 || 50 // 50, because 300<=200 is false (but 300 is truly)
'abc'<=200 && 'abc' || 50 // 50, because NaN<=200 is false (but 'abc' is truly)
({})<=200 && ({}) || 50 // 50, because NaN<=200 is false (but {} is truly)
false<=200 && false || 50 // 50, because false is falsy (but 0<=200)
null<=200 && null || 50 // 50, because null is falsy (but 0<=200)
''<=200 && '' || 50 // 50, because '' is falsy (but 0<=200)