2013-01-04 38 views
2

假设我有这样的:检查JS值是否存在的最简单方法是什么?

var a = parseInt(prompt("Enter A")); 
var b = parseInt(prompt("Enter B")); 
var c = parseInt(prompt("Enter C")); 

什么是检查是否在所有3个变量的存在价值最短方式?

if(a && b && c)不是准确原因0是虚假的。

p.s. A,B,C可以是整数或字符串 ...此外,必须有一个在这里招...

的字符串例如:

var a = (prompt("Enter A")); 
var b = (prompt("Enter B")); 
var c = (prompt("Enter C")); 
+0

'a'是'parseInt'后面的一个字符串吗? –

+0

你说它们可以是整数或字符串,但是使用'parseInt()',它们肯定会是整数(或者NaNs,我猜) – SDC

+0

@DaveNewton我会在我的问题中更清楚 –

回答

2

断然确认是否唯一的办法所有这些值的定义,无论哪种类型,是这样的:

if((typeof a !== 'undefined') || 
    (typeof b !== 'undefined') || 
    (typeof c !== 'undefined')) { /* ... */ } 

不幸的是,依赖于价值感实性,正如你所指出的快捷方式,这并不总是一个可以接受的方法。如Alex K所示,如果事先知道变量的类型,则可以做一些棘手的事情,但事先知道类型可能需要尽可能多的代码,因为您可以避免比较。

编辑1

戴夫牛顿指出prompt总是返回一个限定值;如果用户按取消则返回null

因此,更好的办法是:

function isValid(value) { 
    return typeof value !== 'undefined' && value !== null); 
} 

if(isValid(a) && isValid(b) && isValid(c)){ /* ... */ } 

编辑2

当然,做最简单的事情就是解析整数前检查的有效性。由于

!!"" === false 
!!"0" === true 
!!0 === false 

您可以在字符串/ null的那个提示返回且仅当它们是有效的,做你的分析使用(a && b & c)

+1

它们将始终由提示定义,不是?即使你击中逃生,它也会是空的。 –

+0

好点...我会相应更新 – Dancrumb

1

如何:

ok = !isNaN(a+b+c); 
+0

唉,OP刚刚编辑完全不同的第二种情况。 – apsillers

+0

@apsillers我现在编辑过,但在第一次发布时写过(a,b,c也可以是字符串)。 _edit_是现在写的。 –

+0

@RoyiNamir但是说“他们也可以是字符串”在代码中没有任何意义。代码始终是定义的工件,因为它是运行的。 –

0

你尝试(!!a && !!b && !!c)

AFAIK,除非变量的值是空的,或者nullundefined应该评估到true。 0也会返回false,但我正在代表您的prompt()调用写入,因为它的值不是Number类型。

0

始终使用:

if (typeof(variableName) != "undefined") { 
    //Do something 
} 

由于JavaScript使用JSON对象符号下面的代码是完全有效的:

var x = {}; 

if (x.test == undefined) { 
    //Do something 
} 

但是,如果 “x” 不存在,这将产生一个错误。 在Javascript中没有办法做到这一点更安全。

0

检查一组变量是否具有有效可接受值的最简单方法是根据接受可变数量参数的规范创建一个辅助函数。在这个例子中,如果参数是未定义的,null或NaN编号,则此函数将返回false。对于isNaN,字符串将返回true,因此我们检查参数的类型是否为数字,然后检查它是否为NaN。

function isValid() { 
    var i, args = Array.prototype.slice.call(arguments, 0); 
    for(i = 0; i < args.length; i += 1) { 
     if(typeof args[i] === 'undefined' || args[i] === null 
     || (typeof args[i] === 'number' && isNaN(args[i])) 
     ) { 
      return false; 
     } 
    } 
    return true; 
} 

利用它像这样:

if(isValid(a, b, c)) { 
    ... 
} 
0

如果值只能是字符串或数字,你可以使用:

var valid = ('' + a) && ('' + b) && ('' + c); //always convert into string 

这里也就是一个幻想,但相对较短的一个,这处理undefined,null和空字符串:

var valid = [a].join() && [b].join() && [c].join(); 

Array.prototype.join()中,当元素为undefinednull时,它将被转换为空字符串。

但它既不优雅也不高效。 :(

相关问题