在默认情况下检查布尔值

时间:2014-10-21 13:22:29

标签: javascript

考虑一个变量master,可以是truefalse,而不是其他任何内容。

考虑另一个变量override,可以是undefinedtruefalse

那么如何确定使用哪个变量,如果override不是undefined,那么使用其他方式使用master

也许我们可以这样做:

if ((master !== undefined && master) || override) then
   ...

但这是正确的还有更好的方法吗?

5 个答案:

答案 0 :(得分:1)

if( typeof override !== "undefined" ? override : master)

这是对三元运算符的非常规使用,但它完全符合您的要求:

如果定义了override,请使用它。否则,请使用master。如果选择的是true,那么......

答案 1 :(得分:1)

你这么说:

  • master只能是truefalse
  • override可以是truefalseundefined
  • 如果override不是undefined,请使用

所以正确的代码是:

if (typeof override !== "undefined" ? override : master) {
    // use override
} else {
    // use master
}

答案 2 :(得分:0)

这样的事情对你有用

if ((override === undefined && master) || (override !== undefined && override)) {
     ...
}

答案 3 :(得分:0)

与Niet所说的类似,但我认为将其存储在变量中会更清楚。

var _set = ( typeof override !== 'undefined' ? override : master );

if ( _set ) {
   ...
}

答案 4 :(得分:0)

我会这样做,这更清晰,更容易阅读。

var usethis;
if (typeof override != 'undefined') {
  usethis = override;
} else {
  usethis = master;
}

if (usethis) {
  // Enable feature X
}

首先检查是否定义了override变量:如果是,我们将使用该值,否则回退到master。然后你实际使用该值来启用一个功能(我想这是你的用例)。

如果你愿意,你可以用这种更紧凑的方式写出来:

var usethis = typeof override != 'undefined' ? override : master;

if (usethis) {
  // Enable feature X
}

使用typeof运算符,否则类型强制会将override变量强制转换为布尔值,而你会错过false值。< / p>