2013-08-01 92 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