如何确定变量是“未定义”还是“空”?

时间:2010-04-15 18:12:17

标签: javascript jquery variables null undefined

如何确定变量是undefined还是null?我的代码如下:

var EmpName = $("div#esd-names div#name").attr('class');
if(EmpName == 'undefined'){
  //DO SOMETHING
};
<div id="esd-names">
  <div id="name"></div>
</div>

但如果我这样做,JavaScript解释器会暂停执行。

33 个答案:

答案 0 :(得分:2532)

您可以使用abstract equality operator的质量来执行此操作:

if (variable == null){
    // your code here.
}

由于null == undefined为真,上述代码将同时包含nullundefined

答案 1 :(得分:1024)

同时捕捉nullundefined的标准方法是:

if (variable == null) {
     // do something 
}

- 100%相当于更明确但更简洁:

if (variable === undefined || variable === null) {
     // do something 
}

在编写专业JS时,理解type equality and the behavior of == vs ===是理所当然的。因此,我们使用==并仅与null进行比较。


再次修改

建议使用typeof的评论只是错误。是的,如果变量不存在,我上面的解决方案将导致ReferenceError。 这是一件好事。这个ReferenceError是可取的:它可以帮助您在发布代码之前找到错误并修复它们,就像其他语言中的编译器错误一样。

您不应该在代码中引用任何未声明的变量。

答案 2 :(得分:190)

结合上述答案,似乎最完整的答案是:

if( typeof variable === 'undefined' || variable === null ){
    // Do stuff
}

这适用于任何未声明或声明的变量,并显式设置为null或undefined。对于具有实际非空值的任何声明变量,布尔表达式应该求值为false。

答案 3 :(得分:180)

if (variable == null) {
    // Do stuff, will only match null or undefined, this won't match false
}

答案 4 :(得分:83)

if (typeof EmpName != 'undefined' && EmpName) {
如果值不是,

将评估为true:

  • <强>空

  • <强>未定义

  • <强>的NaN

  • 空字符串(&#34;&#34;)

  • <强> 0

  • <强>假

答案 5 :(得分:24)

大概最简单的方法是:

if(EmpName == null) { /* DO SOMETHING */ };

这是证据:

function check(EmpName) {
  if(EmpName == null) { return true; };
  return false;
}

var log = (t,a) => console.log(`${t} -> ${check(a)}`);

log('null', null);
log('undefined', undefined);
log('NaN', NaN);
log('""', "");
log('{}', {});
log('[]', []);
log('[1]', [1]);
log('[0]', [0]);
log('[[]]', [[]]);
log('true', true);
log('false', false);
log('"true"', "true");
log('"false"', "false");
log('Infinity', Infinity);
log('-Infinity', -Infinity);
log('1', 1);
log('0', 0);
log('-1', -1);
log('"1"', "1");
log('"0"', "0");
log('"-1"', "-1");

// "void 0" case
console.log('---\n"true" is:', true);
console.log('"void 0" is:', void 0);
log(void 0,void 0); // "void 0" is "undefined" 

这是有关==(来源here)的更多详细信息

Enter image description here

奖金=====更清晰的原因(请查看agc answer

Enter image description here

答案 6 :(得分:22)

jQuery attr()函数返回空字符串或实际值(从不nullundefined)。它返回undefined的唯一时间是你的选择器没有返回任何元素。

所以你可能想要测试一个空字符串。或者,因为空字符串,null和undefined都是false-y,所以你可以这样做:

if (!EmpName) { //do something }

答案 7 :(得分:11)

我来为此写自己的功能。 javascript很奇怪

几乎任何东西都可用。 (请注意,这也会检查变量是否包含任何可用的。但由于通常还需要此信息,因此我认为值得发布)。请考虑留言。

function empty(v) {
    let type = typeof v;
    if (type === 'undefined') {
        return true;
    }
    if (type === 'boolean') {
        return !v;
    }
    if (v === null) {
        return true;
    }
    if (v === undefined) {
        return true;
    }
    if (v instanceof Array) {
        if (v.length < 1) {
            return true;
        }
    } else if (type === 'string') {
        if (v.length < 1) {
            return true;
        }
        if (v === '0') {
            return true;
        }
    } else if (type === 'object') {
        if (Object.keys(v).length < 1) {
            return true;
        }
    } else if (type === 'number') {
        if (v === 0) {
            return true;
        }
    }
    return false;
}

打字稿兼容。

编辑。这个函数应该完全与PHP empty() function完全相同(参见RETURN VALUES

考虑undefinednullfalse00.0"0" {}[]空的。

"0.0"NaN" "true被视为非空。

答案 8 :(得分:11)

最短和最简单的方法:

if(!EmpName ){
 // DO SOMETHING
}

如果EmpName为:

  • 未定义
  • NaN
  • 字符串(“”)
  • 0
  • false

答案 9 :(得分:9)

如果要检查的变量是全局变量,请执行

if (window.yourVarName) {
    // Your code here
}

即使yourVarName变量不存在,这种检查方式也不会引发错误。

示例:我想知道我的浏览器是否支持History API

if (window.history) {
    history.back();
}

如何运作:

window是一个对象,它将所有全局变量保存为其属性,而在JavaScript中,尝试访问不存在的对象属性是合法的。如果history不存在,则window.history会返回undefinedundefined是假的,因此if(undefined){}块中的代码将无法运行。

答案 10 :(得分:6)

由于您使用的是 jQuery ,因此可以使用单个函数确定变量是否未定义或其值是否为空。

var s; // undefined
jQuery.isEmptyObject(s); // will return true;

s = null; // defined as null
jQuery.isEmptyObject(s); // will return true;

// usage
if(jQuery.isEmptyObject(s)){
    alert('Either variable: s is undefined or its value is null');
}else{
     alert('variable: s has value ' + s);
}

s = 'something'; // defined with some value
jQuery.isEmptyObject(s); // will return false;

答案 11 :(得分:5)

我刚遇到这个问题,即检查对象是否为空 我只是用这个:

if (object) {
    // Your code
}

例如:

if (document.getElementById("enterJob")) {
    document.getElementById("enterJob").className += ' current';
}

答案 12 :(得分:3)

jQuery check元素不为空

var dvElement = $('#dvElement');

if (dvElement.length  > 0) {
    //do something
}
else{
    //else do something else
}

答案 13 :(得分:2)

foo == null检查应该可以解决问题,并以最短的方式解决“ u​​ndefined OR null”情况。 (不考虑“没有声明foo”的情况。)但是,过去拥有3个等号(作为最佳实践)的人可能不会接受它。只需查看eslint和tslint中的eqeqeqtriple-equals规则...

在我们分别检查变量是undefined还是null时,应使用显式方法,在这种情况下,我应该对此主题做出贡献(目前有27个非否定答案! )是将void 0用作对undefined进行检查的简便快捷方式。

使用foo === undefined是不安全的,因为undefined不是保留字,可能会被遮盖(MDN)。使用typeof === 'undefined'检查是安全的,但是如果我们不关心foo-is-ununclared情况,则可以使用以下方法:

if (foo === void 0 || foo === null) { ... }

答案 14 :(得分:2)

让我们看看这个

  1. let apple; // Only declare the variable as apple
    alert(apple); // undefined
    

    在上面,变量仅声明为apple。在这种情况下,如果我们调用方法alert,它将显示未定义。

  2.    let apple = null; /* Declare the variable as apple and initialized but the value is null */
       alert(apple); // null
    

在第二个中,它显示为空,因为apple值的变量为空。

因此您可以检查值是未定义还是空。

if(apple !== undefined || apple !== null) {
    // Can use variable without any error
}

答案 15 :(得分:2)

据我所知,在Javascript中,我们可以检查未定义的,null或空的var,如下所示。

if (var === undefined){
}

if (var === null){
}

if (var === ''){
}

检查所有条件

if(var === undefined || var === null || var === ''){
}

答案 16 :(得分:2)

使用以下解决方案:

const getType = (val) => typeof val === 'undefined' || !val ? null : typeof val;
const isDeepEqual = (a, b) => getType(a) === getType(b);

console.log(isDeepEqual(1, 1)); // true
console.log(isDeepEqual(null, null)); // true
console.log(isDeepEqual([], [])); // true
console.log(isDeepEqual(1, "1")); // false
etc...

我可以检查以下内容:

  • null
  • undefined
  • 的NaN
  • string(“”)
  • 0

答案 17 :(得分:1)

如果您创建要检查的功能:

export function isEmpty (v) {
 if (typeof v === "undefined") {
   return true;
 }
 if (v === null) {
   return true;
 }
 if (typeof v === "object" && Object.keys(v).length === 0) {
   return true;
 }

 if (Array.isArray(v) && v.length === 0) {
   return true;
 }

 if (typeof v === "string" && v.trim().length === 0) {
   return true;
 }

return false;
}

答案 18 :(得分:1)

随着最新的 javascript 变化,您可以使用新的逻辑运算符 ??= 来检查左操作数是 null 还是 undefined,如果是,则分配右操作数的值。< /p>

所以,

if(EmpName == null){  // if Variable EmpName null or undefined
  EmpName = 'some value';
};

相当于:

EmpName ??= 'some value';

答案 19 :(得分:1)

您可以简单地使用以下代码(我知道这样做的方法更短,但这可以使目视观察更容易,而其他查看代码的人则至少如此。)

if (x === null || x === undefined) {
 // add your response code here etc.

}

答案 20 :(得分:1)

(null == undefined)  // true

(null === undefined) // false

因为===检查类型和值。两者的类型不同,但价值相同。

答案 21 :(得分:1)

var i;

if(i === null || typeof i === 'undefined'){
console.log(i,'i is undefined or null')
}else{
console.log(i,'i has some value')
}

答案 22 :(得分:1)

最佳方式:

if(typeof variable==='undefined' || variable===null) {

/* do your stuff */
}

答案 23 :(得分:1)

我在chrome控制台上运行此测试,使用(void 0)你可以检查undefined

var c;
undefined
if(c === void 0)alert();
// output =  undefined
var c = 1;
// output =  undefined
if(c === void 0)alert();
// output =   undefined
// check c value  c
// output =  1
if(c === void 0)alert();
// output =  undefined
c = undefined;
// output =  undefined
if(c === void 0)alert();
// output =   undefined

答案 24 :(得分:0)

最简单的检查方法是:

if(!variable) {
  // If the variable is null or undefined then execution of code will enter here.
}

答案 25 :(得分:0)

您只需使用typeof:

即可检查值是未定义还是null
if(typeof value == 'undefined'){

答案 26 :(得分:0)

我知道我迟到了十年。但是,如果有人需要一种简短的方法,我将在这里留下答案。

在项目中安装Lodash可能会很有用,因为在这些情况下可以使用辅助功能。

使用ES6模块,导入看起来像这样:

import isNull from 'lodash/isNull';

import isUndefined from 'lodash/isUndefined';

import isNil from 'lodash/isNil';

如果只导入使用的函数,效果会更好。

Lodash的isNull检查value是否为空。

const value = null;
 
 if(isNull(value)) {
    // do something if null
 }

lodash的isUndefined检查值是否未定义。

const value = undefined;

if(isUndefined(value)) {
   // do something if undefined.
}

isNil检查值是否为空 OR (未定义)。与其他两种方法相比,我更喜欢这种方法,因为它会同时检查undefined和null。

答案 27 :(得分:-1)

这是一个非常古老的问题,但我仍然认为测试这两个条件的最佳/安全方法是将值转换为字符串:

var EmpName = $("div#esd-names div#name").attr('class');

// Undefined check
if (Object.prototype.toString.call(EmpName) === '[object Undefined]'){
    // do something with your code
}

// Nullcheck
if (Object.prototype.toString.call(EmpName) === '[object Null]'){
    // do something with your code
}

答案 28 :(得分:-1)

var x;
if (x === undefined) {
    alert ("only declared, but not defined.")
};
if (typeof y === "undefined") {
    alert ("not even declared.")
};

你只能使用第二个:因为它会检查定义和声明

答案 29 :(得分:-1)

调用typeof null将返回值“object”,因为特殊值null被视为空对象引用。通过版本5的Safari和通过版本7的Chrome有一个怪癖,在正则表达式上调用typeof返回“function”,而所有其他浏览器返回“object”。

答案 30 :(得分:-3)

要测试变量是否为null或未定义,请使用以下代码。

    if(sVal === '' || sVal === null ||typeof sVal === 'undefined'){
    console.log('variable is undefined or null');
    }

答案 31 :(得分:-3)

MOV Dl,Al

if(!EmpName){ 做点什么 };

答案 32 :(得分:-4)

if(x==null)在javascript中是个糟糕的主意,使用"=="判断可能导致意外的类型强制,并且无法通过咖啡脚本阅读,   从不使用&#34; ==&#34;或&#34;!=&#34;条件判断!

if(x)会更好。但是,如果 0和&#34;&#34; ,它将被视为 false ,而不是等于"!= null" true

enter image description here

https://www.w3schools.com/js/js_best_practices.asp