2

假设我有这个:

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

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

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

ps a,b,c 可以是整数或字符串...另外,这里一定有技巧...

对于字符串示例:

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

6 回答 6

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

您可以(a && b & c)在提示返回的字符串/null 上使用,并且只有当它们有效时,才进行解析。

于 2013-01-04T15:32:50.643 回答
1

这个怎么样:

ok = !isNaN(a+b+c);
于 2013-01-04T15:33:01.670 回答
0

始终使用:

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

由于 Javascript 使用 Json 对象表示法,以下代码完全有效:

var x = {};

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

但如果“x”不存在,则会产生错误。在 Javascript 中无法做到这一点更安全。

于 2013-01-04T15:55:55.167 回答
0

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

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

这里还有一个花哨但相对较短的,它处理undefined,null和空字符串:

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

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

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

于 2013-01-04T17:16:44.177 回答
0

你试过了(!!a && !!b && !!c)吗?

AFAIK,除非字符串变量的值为空,null否则undefined它应该评估为true. 0 也会返回false,但我代表您的prompt()来电写信,因为它的值不会是 Number 类型。

于 2013-01-04T15:53:00.697 回答
0

检查一组变量是否具有有效、可接受的值的最短方法是根据您的规范创建一个辅助函数,该函数接受可变数量的参数。在此示例中,如果参数未定义、null 或 NaN 数字,此函数将返回 false。字符串将返回 true isNaN,因此我们在检查参数的类型是否为数字之前检查它是否为 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) ) {
    ...
}
于 2013-01-04T16:10:45.480 回答