JavaScript/jQuery中是否有类似于PHP中isset的东西?

81

有没有javascript/jQuery中的东西可以检查变量是否已设置/可用?在php中,我们使用isset($ variable)这样的方式来检查这种情况。

谢谢。


1
你是指空值检查还是DOM可用性检查? - kobe
什么是 isset 在 PHP 中的作用?我不知道,所以想问一下。 - kobe
@gov isset — 判断变量是否已设置且不为 NULL - http://php.net/manual/zh/function.isset.php - Sandeepan Nath
好的,我已经进行了一种空值检查。 - kobe
11个回答

165

尝试使用这个表达式:

typeof(variable) != "undefined" && variable !== null

如果变量已定义且不为null,该语句将返回true,这与PHP中的isset函数相同。

您可以像这样使用它:

if(typeof(variable) != "undefined" && variable !== null) {
    bla();
}

我简要尝试了你提供的第二种选择。由于在FF4中尝试使用未定义参数调用自定义isset()函数会抛出异常,因此它并没有成功。第一种选择对我起作用了。谢谢。 - C.O.
2
我认为“variable !== null”不适用于这里。variable = null可以是一个具有重要意义的定义值。我会将null检查推到另一个“empty”或“hasValue”函数中。主要使用isset来防止非实例化错误和设置默认值,而不是检查变量的实质。 - Dieter Gribnitz
user787301,PHP的isset函数执行NULL检查。我也更喜欢将NULL视为“未设置”,因为这是大多数语言中的含义;如果我可以再加上更多个人意见,我认为在尝试读取变量之前,您应该知道它是否已定义(在这种情况下,NULL检查是我的回答中唯一正确的部分)。您是正确的,NULL具有一定的含义:一个未设置的值;一个没有值的值。 - Emil Vikström
你认为两个非运算符(!!)的用法怎么样? - Haseeb Zulfiqar
这很奇怪,当使用this.value时它不起作用...就像if(typeof(this.value) != "undefined" && this.value !== null)无法检测未定义的this.value属性。 - Robert Sinclair
显示剩余7条评论

11

JavaScript 在 PHP JS 上的 isset() 函数

function isset () {
    // discuss at: http://phpjs.org/functions/isset
    // +   original by: Kevin van     Zonneveld (http://kevin.vanzonneveld.net)
    // +   improved by: FremyCompany
    // +   improved by: Onno Marsman
    // +   improved by: Rafał Kukawski
    // *     example 1: isset( undefined, true);
    // *     returns 1: false
    // *     example 2: isset( 'Kevin van Zonneveld' );
    // *     returns 2: true
    var a = arguments,
        l = a.length,
        i = 0,
        undef;

    if (l === 0) {
        throw new Error('Empty isset');
    }

    while (i !== l) {
        if (a[i] === undef || a[i] === null) {
            return false;
        }
        i++;
    }
    return true;
}

不起作用<script> if(!isset(res)){ alert('未设置') } alert('前往此处') </script> - dazzafact
1
这个解决方案适用于许多人。可能是你犯了一些错误。请提供有关您的问题的更多详细信息,例如控制台输出或其他内容。 - Oleg

5

我认为typeof可以达到目的。

if(typeof foo != "undefined"){}

请注意,typeof null == 'object' - 这只是 JavaScript 的另一个怪癖。 - PleaseStand

4
如果您想检查一个属性是否存在:hasOwnProperty 是一个很好的选择。
由于大多数对象都是某些其他对象的属性(最终导致 window 对象),因此这对于检查值是否已声明非常有效。

1
聪明,但只有在你知道你正在处理哪个对象时才有用。 - Emil Vikström

4

这些回答的某些部分是有效的。我将它们全部汇编成一个名为“isset”的函数,就像问题所要求的一样,它的作用与PHP中的相同。

// isset helper function 
var isset = function(variable){
    return typeof(variable) !== "undefined" && variable !== null && variable !== '';
}
这是一个关于如何使用它的示例:

以下是使用步骤:

var example = 'this is an example';
if(isset(example)){
    console.log('the example variable has a value set');
}

这取决于你需要的情况,但让我解释一下每个部分的作用:
  1. typeof(variable) !== "undefined" 检查变量是否被定义
  2. variable !== null 检查变量是否为null(有些人会明确地将其设置为null,并且不认为这是正确的,如果是这种情况,请删除此部分)
  3. variable !== '' 检查变量是否设置为空字符串,如果空字符串对您的用例算作设置,则可以删除此部分
希望这能帮助到某些人 :)

3

+1. 在 JavaScript 中速度至关重要... - Ioannis Karadimas

3

http://phpjs.org/functions/isset:454

phpjs项目是一个值得信赖的资源。那里有许多等效于php函数的js函数。我一直在使用它,并且迄今为止没有发现任何问题。


2
问题在于将未定义的变量传递给函数会导致错误。
这意味着您必须在将其作为参数传递之前运行typeof。
我发现最清晰的方法是这样的:
function isset(v){
    if(v === 'undefined'){
        return false;
    }
    return true;
}

使用方法:

if(isset(typeof(varname))){
  alert('is set');
} else {
  alert('not set');
}

现在代码更加简洁易读。

如果你尝试从未实例化的变量中调用一个变量,仍然会出现错误:

isset(typeof(undefVar.subkey))

因此,在尝试运行之前,您需要确保该对象已定义:
undefVar = isset(typeof(undefVar))?undefVar:{};

1
如果你和我一样懒惰,而且使用像NetBeans这样的适当IDE。只需将以下内容添加到您的代码模板中:(缩写:isset)isset(typeof(${cursor}))。像这样的小事情可以为您节省大量时间。 - Dieter Gribnitz
1
另一个NetBeans快捷键:(缩写:set)${variable} = isset(typeof(${variable}))?${variable}:{}; - Dieter Gribnitz

0

除了@emil-vikström的回答之外,检查variable!=null也适用于variable!==null以及variable!==undefined(或typeof(variable)!="undefined")。


0

在这里 :)

function isSet(iVal){
 return (iVal!=="" && iVal!=null && iVal!==undefined && typeof(iVal) != "undefined") ? 1 : 0;
} // Returns 1 if set, 0 false

3
您可能需要添加更多细节,以说明为什么这将有助于原帖作者。 - Zane
是的,请添加一些关于您的代码的解释,它是如何解决问题的,以及原始问题的缺失或错误。这将有助于未来的其他人。 - Our Man in Bananas

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接