2016-12-16 63 views
0

我想下面的代碼:的JavaScript檢查多個變量爲空

var var1 = ""; 
var var2 = "test"; 
var var3 = ""; 

vars = new Array('var1','var2','var3'); 

var count = 0; 

for (var i = 0; i < vars.length; ++i) { 
    var name = vars[i]; 
    if (field_is_empty(name)) { 
     count++; 
    } 
} 

console.log(count); 

function field_is_empty(sValue) { 
    if (sValue == "" || sValue == null || sValue == "undefined") 
    { 
     return true; 
    } 
    return false; 
} 

這裏的結果應該是count = 2,因爲兩個變量都是空的,但它總是0。我猜測它在使用if (field_is_empty(name))時必定會出現某種情況,因爲它可能不會將名稱轉換爲實際變量的名稱。

問題2#儘管如此相關

KARTHIK甘尼申提到我已經更新了代碼,它完美的作品。

現在的代碼是:

var var1 = ""; 
var var2 = "test"; 
var var3 = ""; 

vars = new Array(var1,var2,var3); 

var count = 0; 

for (var i = 0; i < vars.length; ++i) { 
    var name = vars[i]; 
    if (field_is_empty(name)) { 
     count++; 
    } 
} 

console.log(count); 

function field_is_empty(sValue) { 
    if (sValue == "" || sValue == null || sValue == "undefined") 
    { 
     return true; 
    } 
    return false; 
} 

而且問題是,如果添加一個新的if語句是這樣的:

if (count == '3') { 
    console.log('AllAreEmpty'); 
} else { 
    for (var i = 0; i < vars.length; ++i) { 
     var name = vars[i]; 
     if (field_is_empty(name)) { 
      //Set the empty variables as "1900-01-01" 
      variableService.setValue(name,"test"); 
     } 
    } 
} 

它什麼都不做,我已經測試使用variableService.setValue('var1',"test"),它作品。

PS:variableService.setValue是一個由軟件控制的函數,我不知道它究竟幹了什麼,我知道如果像上面提到的那樣使用它,它就會起作用。

+1

這是因爲你沒有傳遞每個變量的內容,而是它的名字。例如,你正在做'field_is_empty('var1')',而不是'field_is_empty(「」)'。你只需要從你的數組中刪除引號。 – Santi

+1

你沒有正確地把你的變量放到你的數組中。仔細看看你在做什麼,這是一個變量名稱的字符串,而不是變量本身。刪除初學者的報價。 – Slime

+0

使用:'vars = new Array(var1,var2,var3);'。 –

回答

0

在你的第一次嘗試,當你創建了一個陣列中使用的變量名稱爲字符串。您需要可以使用值本身:

vars = new Array(var1,var2,var3); 

,或者如果你堅持用自己的名字使用它們,那麼你需要通過名稱來找到它們,當你使用它們:

if (field_is_empty(window[name])) { 

它什麼都不做

這是不可能的。它可能會拋出錯誤,或者輸入if或輸入else,但什麼都不做是不可能的。然而,由於你打算首先使用名稱變量(可能不是沒有理由),然後你打算傳遞一個名稱,但它是一個值,它不能按預期工作,我假設你的初始數組初始化是正確的,如果應該像這樣修復:

var var1 = ""; 
var var2 = "test"; 
var var3 = ""; 

vars = new Array(var1,var2,var3); 

var count = 0; 

for (var i = 0; i < vars.length; ++i) { 
    var v = window[vars[i]]; //You need the value here 
    if (field_is_empty(v)) { 
     count++; 
    } 
} 

console.log(count); 
if (count == '3') { 
    console.log('AllAreEmpty'); 
} else { 
    for (var i = 0; i < vars.length; ++i) { 
     var v = window[vars[i]]; 
     if (field_is_empty(v)) { 
      //Set the empty variables as "1900-01-01" 
      variableService.setValue(vars[i],"test"); 
     } 
    } 
} 

function field_is_empty(sValue) { 
    if (sValue == "" || sValue == null || sValue == "undefined") 
    { 
     return true; 
    } 
    return false; 
} 
0

你的陣列是錯誤的

應該

vars = new Array(var1,var2,var3); 

這裏是jsfiddle

+0

工作正常,但它創造了我另一個問題,如果你可以請看看編輯。無論如何感謝您的提示。 – rgomez

+0

你在哪裏添加這個「if」條件? –

+0

就在'function field_is_empty'之前# – rgomez

1

你肯定不正確初始化數組,你把字符串 「VAR1」, 「VAR2」, 「VAR3」而不是引用字符串(變量)。 試試這個:

vars = new Array(var1,var2,var3); 
+0

是的,但工作,但給我一個新的問題。 – rgomez