2013-09-25 75 views
0

我想知道这是否是解决此javascript问题的最佳方法。我想首先检测一个变量是否是未定义的。如果不是,我想插入一个默认值。Javascript将未定义值设置为默认值,但前提是未定义

示例:这个if语句正在接收一个名为zoomControl的变量。它可以有3个可能的值。真,假或未定义。

我想输出是:真=真,假=假,不确定=真

if (opt.set_zoomControl) { 
      set_zoomControl = opt.set_zoomControl 
    } else { 
     set_zoomControl = true; 
    } 

是这有效吗?这可以缩短或重写吗?

谢谢。

+0

这可能是有用的http://stackoverflow.com/questions/8884071/javascript-shorthand-ternary-operator set_zoomControl = opt.set_zoomControl ||真正; – m88

回答

1
set_zoomControl = (opt.set_zoomControl === false)? false: true; 
+0

谢谢。我在我的问题描述中忘记了一个关键要求。默认值(未定义值)并非总是如此。 (如在示例代码中)。默认值有时可能是错误的。这适用于两种情况。 – marksjack

0
if (opt.set_zoomControl) { 
      //true 
} 
else{ 
     //false or undefinded 
} 
0

下面是写这个最简洁的方式:

set_zoomControl = opt.set_zoomControl !== false; 

应该不会太难看,这适用于所有你的三个情况:

false !== false  // evaluates to false 
true !== false  // evaluates to true 
undefined !== false // evaluates to true 

您目前的方法将导致set_zoomControl始终为true。如果你想用你的if/else格式为清楚起见,将是最直接的,首先处理的虚假情况,然后让真正的和未定义由else处理:

if (opt.set_zoomControl === false) { 
    set_zoomControl = false; 
} else { 
    set_zoomControl = true; 
} 
0

set_zoomControl = opt.set_zoomControl || 0;