假设我有这个:
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 :(得分:2)
分类确认是否定义了所有这些值的唯一方法是:
if( (typeof a !== 'undefined') ||
(typeof b !== 'undefined') ||
(typeof c !== 'undefined')) { /* ... */ }
不幸的是,快捷方式依赖于价值的真实性,正如您所指出的,这并不总是一种可接受的方法。
正如Alex K所示,如果你事先知道变量的类型,你可以做一些棘手的事情,但事先知道这个类型可能需要你在比较中避免的代码。
修改1
Dave Newton指出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 :(得分:1)
这个怎么样:
ok = !isNaN(a+b+c);
答案 2 :(得分:0)
你试过(!!a && !!b && !!c)
吗?
AFAIK,除非字符串变量的值为空,null
或undefined
,否则它应评估为true
。 0也会返回false
,但我代表您的prompt()
来电,因为它的值不是数字类型。
答案 3 :(得分:0)
始终使用:
if (typeof( variableName ) != "undefined") {
//Do something
}
由于Javascript使用Json对象表示法,因此以下代码完全有效:
var x = {};
if (x.test == undefined) {
//Do something
}
但如果“x”不存在,则会产生错误。 在Javascript中没有办法更安全。
答案 4 :(得分: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) ) {
...
}
答案 5 :(得分:0)
如果值只能是字符串或数字,则可以使用:
var valid = ('' + a) && ('' + b) && ('' + c); //always convert into string
这里也是一个花哨而又相对较短的一个,它涉及undefined
,null
和空字符串:
var valid = [a].join() && [b].join() && [c].join();
在Array.prototype.join()
中,当元素为undefined
或null
时,它将转换为空字符串。
但它既不优雅也不高效。 :(