我正在尝试设置一些属性,它们可以采用默认值 ( a
) 或被另一个值 ( b
) 覆盖。两者a
和b
都可能未定义。我需要确保,如果b
指定,它将覆盖设置的值a
问题:
这是否可以通过简单的设置来工作:
foo: {
param: a || b
}
或者更具体地说,如果两者a
都b
定义了,我如何确保b
覆盖a
?
谢谢!
我正在尝试设置一些属性,它们可以采用默认值 ( a
) 或被另一个值 ( b
) 覆盖。两者a
和b
都可能未定义。我需要确保,如果b
指定,它将覆盖设置的值a
问题:
这是否可以通过简单的设置来工作:
foo: {
param: a || b
}
或者更具体地说,如果两者a
都b
定义了,我如何确保b
覆盖a
?
谢谢!
它比这更复杂,但首先要做的是意识到“b”必须先行:
param: b || a
如果 "b" 有一个值 (is not undefined
) 并且它不是null
, 0
, NaN
, ""
, or false
,那么 "param" 属性的值将被设置为 "b" 的值。||
只要“b”的合法“好”值不能是 JavaScript“假”值,该运算符就适用于这种情况。
或者更具体地说,如果两者
a
都b
定义了,我如何确保b
覆盖a
?
您交换操作数的顺序。
foo: {
param: b || a
}
它短路到首先返回 true 的值。他们很好地描述了这里的逻辑 (||) 和其他操作数。
一般来说你不能像写的那样解决这个问题,因为在Javascript中太多的值会被处理为“false”......例如,让我们把
var b = 0;
var a = 5;
0
是一个很好的价值,对吧?不是undefined
或null
。这个时候你手里有多少钱?0 美元?:-)
var res1 = b || a; // 5
var res2 = a || b; // 5
0
不能覆盖任何东西 :-) (和 相同""
,false
都是代表某事的好值)