我正在尝试设置一些属性,它们可以采用默认值 ( 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都是代表某事的好值)