-2

我正在尝试设置一些属性,它们可以采用默认值 ( a) 或被另一个值 ( b) 覆盖。两者ab都可能未定义。我需要确保,如果b指定,它将覆盖设置的值a

问题:

这是否可以通过简单的设置来工作:

 foo: {
   param: a || b
 }

或者更具体地说,如果两者ab定义了,我如何确保b覆盖a

谢谢!

4

4 回答 4

4

它比这更复杂,但首先要做的是意识到“b”必须先行:

  param: b || a

如果 "b" 有一个值 (is not undefined) 并且它不是null, 0, NaN, "", or false,那么 "param" 属性的值将被设置为 "b" 的值。||只要“b”的合法“好”值不能是 JavaScript“假”值,该运算符就适用于这种情况。

于 2013-09-11T12:36:28.837 回答
1

或者更具体地说,如果两者ab定义了,我如何确保b覆盖a

您交换操作数的顺序。

foo: {
  param: b || a
}
于 2013-09-11T12:36:55.947 回答
1

它短路到首先返回 true 的值。他们很好地描述了这里的逻辑 (||) 和其他操作数。

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Logical_Operators?redirectlocale=en-US&redirectslug=JavaScript%2FReference%2FOperators%2FLogical_Operators

于 2013-09-11T12:38:50.213 回答
1

一般来说你不能像写的那样解决这个问题,因为在Javascript中太多的值会被处理为“false”......例如,让我们把

var b = 0;
var a = 5;

0是一个很好的价值,对吧?不是undefinednull。这个时候你手里有多少钱?0 美元?:-)

var res1 = b || a; // 5
var res2 = a || b; // 5

0不能覆盖任何东西 :-) (和 相同""false都是代表某事的好值)

于 2013-09-11T12:42:26.837 回答