2016-12-16 90 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