2013-08-01 64 views
2

我遇到问题。 如果符合我的条件,我将只声明一个变量。区分声明变量与未声明的方法

if(//some condition1) 
var some1=1; 
else if(//some condition1) 
var some2=2; 

现在

var some3=some1+some2; 

如果两个条件都满足,它是好的,有在some3;

如果只有一个条件得到满足,我想要么some1some2some3总和

我该如何做到这一点?

注意:感谢您的回答但我想只在满足条件时声明变量。 有没有其他解决方案?

+0

为什么不声明变量,然后再只是设置它们的值,当它遇到@Loney你检查的,如果(VAR条件 – artsylar

+0

= = undefined)condition然后添加只定义的一个 –

+0

@captain你的意思是'if(typeof var ===“undefined”)'? – Grallen

回答

3
var some3=0; 

if(//some condition1){ 
    var some1=1; 
    some3 += some1; 
}else if(some condition2){ 
    var some2=2; 
    some3 += some2; 
} 

编辑:更好的选择:

var some3=0;   
if(some condition1){ 
    some3 += 1; 
}else if(some condition2){ 
    some3 += 2; 
} 

而且两个条件都不会在同一时间见面,所以,如果你愿意,你可以像下面还

var some3=0;   
if(some condition1){ 
    some3 += 1; 
} 
if(some condition2){ 
    some3 += 2; 
} 
+0

@Deepenshu问题说变量只有在条件为真时才应声明 –

+0

好的逻辑,但是你重新声明了你的变量。也可以改进格式化 – musefan

+0

检查我的编辑! –

1

首先将两个变量初始化为0。

var some1 = 0, some2 = 0; 
if (condition1) { 
    some1 = 1; 
} 
if (condition2) { 
    some2 = 2; 
} 
var some3 = some1 + some2; 

既然要允许满足,设置这两个变量的两个条件,你不应该使用else if。只是两个单独的if陈述。

0

为什么不声明变量,然后再只是设置它们的值当满足条件

var some1 = 0; 
var some2 = 0; 

if (//some condition) 
{ 
    some1 = 1; 
} 
if (// some condition) 
{ 
    some2 = 2; 
} 

var some3 = some1 + some2; 
0

声明在开头的所有变量。将它们初始化为0.如果满足条件,则更改变量值。然后,当你做出总和时,任何值加0都保持不变。或者,如果条件满足,则该值将不能为0

1
if(//some condition1) { 
    var some1 = 1; 
} else if(//some condition1) { 
    var some2 = 2; 
} 

var some3 = 0; 

if(some1 !== undefined) { 
    some3 += some1; 
} 
if(some2 !== undefined) { 
    some3 += some2; 
} 
+0

所述。这似乎是对我的正确答案。只有一个建议,比较'null'或使用'typeof some1 ==='undefined'',因为与undefined并不完全安全 –

+0

为什么它不是完全安全? – Virus721

+0

因为在较老的环境中,可能会覆盖'undefined'的值并将其改为例如'true',这会破坏很多东西。 –

1

怎么样的对象:

var obj = {}; 
if(//conditon){ 
    obj.some1 = 1; 
} 
else if(//condition){ 
    obj.some2 = 1; 
} 

var sum3 = 0; 
for(var key in obj){ 
    sum3 += obj[key]; 
} 
2

首先,你不能声明变量只有在一定的条件满意。 JavaScript有功能范围,这意味着,无论在哪里在你的代码编写var some1,它都会被悬挂起来,到功能范围的顶部:

function A() { 
    if (...) { 
     var a = 1; 
    } 
} 

将被解释为:

function A() { 
    var a; 
    if (...) { 
     a = 1; 
    } 
} 

这就是说。我认为,解决你的问题,你只需要以0初始化变量:

var some1 = 0, 
    some2 = 0, 
    some3; 

if(//some condition1) 
    some1 = 1; 
else if(//some condition1) 
    some2 = 2; 

some3 = some1 + some2; 

编辑

其实,有一个声明变量的方式只有当条件满足:

if (...) { 
    eval("var x = 1;"); 
} 

但我真的没有看到任何需要这样的“黑客”,并不会建议这种方法。

0

如果您需要使用该模型,您可以使用第四个变量。

var some0 = 0 
if(/*some condition1*/) { 
var some1=1; 
some0 = some1 + some3 
} 
else if(/*some condition1*/) { 
var some2=2; 
some0 = some2 + some3 
} 
some3=some0 
0
var some3 = 0; //Assingning global var. 
if(//some condition1) 
    var some1=1; 
else if(//some condition1) 
    var some2=2; 

在条件

if(some1 != null && some2 != null) 
    some3=some1+some2; 
else if(some1 != null && some2 == null) 
    some3=some1; 
else if(some1 == null && some2 != null) 
    some3=some2; 
else if(some1 == null && some2 == null) 
    some3=some3; 

然后

alert(some3); 
0

如何:

var some3 = 
(2 > 4  ? 10:0) + 
(5 < 8  ? 20:0) + 
(10 == 11 ? 30:0) + 
('a' < 'b' ? 40:0) ; 

我承认这的确不漂亮。

0

你的使用

如果(//一些条件1)VAR some1 = 1;

else if(// some condition1)var some2 = 2;

,然后尝试catch语句就像在我jsfiddle

try{ 

var some3=some1+some2; 

} 
catch (e){ 
    try{ 
     var some3=some1; 
     document.getElementById("test").innerHTML= some3; 

    }catch (e){ 
     try{ 
      var some3=some2 ; 
      document.getElementById("test").innerHTML= some3; 

     } 
     catch (e){ 
     document.getElementById("test").innerHTML="Something went wrong!!!!or no condition satisfied"; 
     } 
    } 
} 
+0

(使用异常是低效的,因为抛出异常的开销,但我只是给出了一个额外的选项形式的其他答案。) 有关[老问题]尝试catch的副作用的更多信息(http: //stackoverflow.com/questions/3217294/javascript-try-catch-performance-vs-error-checking-code)。 为了回答这个问题@ jon-j创建了这个[小提琴](http://jsfiddle.net/Mct5N/),证明了这一点。 – Andreas