在Javascript中,b总是会覆盖设置时间(a || b)吗?

时间:2013-09-11 12:35:39

标签: javascript operators operator-precedence

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

设置的值

问题:

这可以通过简单设置来实现:

 foo: {
   param: a || b
 }

或者更具体地说,如果同时定义了ab,我怎样才能确保b覆盖a

谢谢!

4 个答案:

答案 0 :(得分:4)

比这更复杂,但要做的第一件事就是要意识到“b”必须先行:

  param: b || a

如果“b”有值(不是undefined)且不是null0NaN""或{{1然后,“param”属性的值将设置为“b”的值。 false运算符适用于此类情况,只要“b”的合法“良好”值不能是JavaScript“虚假”值。

答案 1 :(得分:1)

  

或者更具体地说,如果同时定义了ab,我怎样才能确保b覆盖a

您交换了操作数的顺序。

foo: {
  param: b || a
}

答案 2 :(得分:1)

答案 3 :(得分:1)

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

var b = 0;
var a = 5;

0是一个很好的价值,对吗?它不是undefinednull。你手上有多少钱? 0 $ ? : - )

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

0无法覆盖任何内容:-)(""false相同,两者都代表某些优点)