我正在尝试设置一些属性,这些属性可以采用默认值(a
)或被其他值(b
)覆盖。 a
和b
都可能未定义。我需要确保,如果指定了b
,它将覆盖a
问题:
这可以通过简单设置来实现:
foo: {
param: a || b
}
或者更具体地说,如果同时定义了a
和b
,我怎样才能确保b
覆盖a
?
谢谢!
答案 0 :(得分:4)
比这更复杂,但要做的第一件事就是要意识到“b”必须先行:
param: b || a
如果“b”有值(不是undefined
)且不是null
,0
,NaN
,""
或{{1然后,“param”属性的值将设置为“b”的值。 false
运算符适用于此类情况,只要“b”的合法“良好”值不能是JavaScript“虚假”值。
答案 1 :(得分:1)
或者更具体地说,如果同时定义了
a
和b
,我怎样才能确保b
覆盖a
?
您交换了操作数的顺序。
foo: {
param: b || a
}
答案 2 :(得分:1)
它与首先返回true的值短路。他们在这里很好地描述了逻辑(||)和其他操作数。
答案 3 :(得分:1)
一般来说,你不能像写的那样解决这个问题,因为在Javascript中太多的值会被处理为“false”...例如,让我们把它放在
var b = 0;
var a = 5;
0
是一个很好的价值,对吗?它不是undefined
或null
。你手上有多少钱? 0 $ ? : - )
var res1 = b || a; // 5
var res2 = a || b; // 5
0
无法覆盖任何内容:-)(""
和false
相同,两者都代表某些优点)