如何确定变量是“undefined”还是“null”?

How can I determine if a variable is 'undefined' or 'null'?

提问人:sadmicrowave 提问时间:4/16/2010 最后编辑:Dave Mackeysadmicrowave 更新时间:8/31/2023 访问量:3396669

问:

如何确定变量是否为 或?undefinednull

我的代码如下:

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

但是当我这样做时,JavaScript 解释器会停止执行。

javascript jquery 变量 null 未定义

评论

0赞 T.Todua 12/4/2018
如何在 JavaScript 中检查空字符串的可能重复项?
0赞 Dennis Nolan 7/30/2020
使用内置的 Nullish 合并运算符 (??)裁判;developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/......
0赞 user7394313 10/20/2021
if(EmpName == 'undefined') 不会测试 EmpName 是否未定义,它将测试字符串 “undefined”,因此请去掉那些单引号: if(EmpName == undefined) // 因为不带引号的 'undefined' 是...undefined 或更简单的 if(!EmpName){ // 做某事 };

答:

3519赞 Sarfraz 4/16/2010 #1

您可以使用抽象相等运算符的特性来执行此操作:

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

因为是真的,所以上面的代码将同时捕获 和 。null == undefinednullundefined

评论

9赞 Entretoize 9/6/2018
我正在尝试测试 fire 中的 event 是否为 null,并且错误阻止执行:“event is undefined”
5赞 Seraf 3/18/2019
@MichaelFever 这怎么行不通?将此内容复制粘贴到您的控制台中: 它应该返回const y = undefined; y == null;true
3赞 Pshemo 4/18/2019
@ChrisStryczynski 例如,从您的注释中,您声明了常量,但您正在比较(不是)。当我在 Chrome 和 Firefox 上进行测试时,我得到了结果。如果您遇到错误,那么您可能尝试使用赋值运算符而不是比较,这对于返回错误是有意义的,因为无法重新赋值。yabcyyconsole.log(y == null);true===const
6赞 d.popov 5/14/2019
可能很棘手: --> true --> trueundefined !== nullundefined == null
4赞 Ryan Haining 8/9/2019
相关比较的活生生的例子。LGTM。
33赞 Chetan S 4/16/2010 #2

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

因此,您可能希望针对空白字符串进行测试。或者,由于空白字符串、null 和 undefined 是 false-y,因此您可以这样做:

if (!EmpName) { //do something }

评论

2赞 Eran Medan 3/14/2012
Chrome 17.0.963.78 m 给出此错误:ReferenceError: EmpName is not defined
10赞 Dave 6/25/2013
@EranMedan我知道这已经晚了,但希望它能帮助到以后来这里的人。出现错误的原因是它根本没有被声明。通常,你会将 EmpName(或其他一些变量)传递给一个函数,或者另一个函数的返回值,从而声明(例如:“var x;”)。若要测试它是否返回 undefined、null 或空白字符串,可以使用上述解决方案。
0赞 codinghands 8/21/2018
我意识到这是一个冷冰冰的问题,但是如果元素上不存在该属性,jQuery将返回(而不仅仅是如果选择器没有匹配的元素,根据答案)。例如,没有 will 返回undefinedimgsrcundefined$('img').attr('src');
193赞 user216441 4/16/2010 #3
if (variable == null) {
    // Do stuff, will only match null or undefined, this won't match false
}

评论

15赞 Chuck 4/16/2010
以防万一有人认为这是另一个半答案,这确实有效。 计算结果等于 。undefinednull
4赞 Eran Medan 3/14/2012
在 chrome 控制台中失败...ReferenceError:变量未定义,因此它可能有效,但不适合我......
52赞 3/15/2012
它只适用于已声明的变量,而不适用于可能声明或可能不会声明的变量,这种情况很少发生。(对于这种情况,您需要使用 typeof + a null 检查)
11赞 Web_Designer 6/19/2013
刚刚发现你可以添加这个注释:到你的JS文档或函数的顶部,JSHint将停止警告你使用./*jshint eqnull:true */== null
3赞 Ben Aston 2/22/2014
@Aerovistae你能给我指出一个明确指出已损坏的参考资料吗?这个答案中的强制对我来说是完全有道理的......==if(variable == null)
298赞 jkindwall 10/12/2013 #4

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

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

这应该适用于任何未声明或已声明并显式设置为 null 或未定义的变量。对于具有实际非 null 值的任何声明变量,布尔表达式的计算结果应为 false。

评论

2赞 user664833 9/5/2014
@Aerovistae 我认识到这是一个运算符,而不是一个函数,所以它不需要括号,但我仍然欣赏括号 - 只是为了阅读清晰。typeof
1赞 Frozen Crayon 3/5/2015
直接检查 if(variable===undefined) 而不是使用 typeof 怎么样?
4赞 Rogue 4/1/2015
@ArjunU,如果未声明变量,则会导致 ReferenceError。如果您不知道是否声明了变量,请使用上述解决方案。如果可以保证至少声明了变量,则可以使用variable == null
3赞 Abdul Sadik Yalcin 5/13/2016
这是一个更好的解决方案,因为正如@Rogue所指出的,变量可能没有被声明。
0赞 March Ho 5/31/2016
如果我错了,请纠正我,但第一个条件不是第二个条件的超集,因此第二个条件是多余的吗?
9赞 Welshboy 10/16/2013 #5

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

if (object) {
    // Your code
}

例如:

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

评论

3赞 Harry Svensson 11/19/2013
最好设置 var A = document.getElementById(“enterJob”) if(A)A.className+= ' current';这样,您可以为相同的结果完成 50% 的工作......但也许你只是为了表演而这样做,然后我敬礼。
1371赞 temporary_user_name 1/22/2014 #6

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

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

--这 100% 等同于更明确但不太简洁的:

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

在编写专业 JS 时,人们理所当然地认为类型相等和 ===== 的行为是可以理解的。因此,我们使用 并且仅与 进行比较。==null


再次编辑

建议使用的评论是完全错误的。是的,如果变量不存在,我上面的解决方案将导致 ReferenceError。这是一件好事。这个 ReferenceError 是可取的:它将帮助您在交付代码之前找到错误并修复它们,就像其他语言中的编译器错误一样。如果您正在处理您无法控制的输入,请使用 /。typeoftrycatch

代码中不应有任何对未声明变量的引用。

评论

55赞 Mani Gandham 6/15/2014
如果代码中根本没有定义或引用变量,这将导致 ReferenceError 并中断执行,使用 typeof 更安全。
79赞 temporary_user_name 6/15/2014
这更像是一个风格点。如果根本没有声明变量,那真的只是作者的糟糕写作。你应该知道你的变量是否被声明了,这不应该是一个问题。但是,是的,如果出于某种原因,应该将其更改为 window.variable 而不仅仅是变量,这不会导致引用错误。应避免使用类型。
10赞 Timothy Kanski 1/10/2017
-OP:关于这些比较是“100% 等效”的说法是完全错误的,正如您在自己的编辑中指出的那样,第二个将导致 ReferenceError。至于断言:“你不应该在代码中引用任何未声明的变量。真?听说过可选参数吗?jsfiddle.net/3xnbxfsu
25赞 chiliNUT 3/5/2017
如果可选参数@TimothyKanski可选参数未提供,则它们可能未定义,但它们绝对是声明的变量。它们被声明并且值为 ,就像任何已声明但未初始化的变量一样,即您的参数并不真正成立undefinedvar someVar;
7赞 temporary_user_name 8/3/2017
@Thomas检验真实性。它会数出 、、 、 和空字符串以及 和 ,所以它不是这里的正确答案。至于,如果问题是“这个变量是 NULL 还是 UNDEFINED?(也许你希望值是或......你不能用 来确定这一点,除非检查该值不是任何其他类型的实例,这太疯狂了。所以这也是错误的答案。if (variable)false0NaNnullundefinedinstanceofnullundefinedinstanceof
15赞 DenisS 2/11/2014 #7

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

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

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

示例:我想知道我的浏览器是否支持历史记录 API

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

工作原理:

window是一个包含所有全局变量作为其属性的对象,在 JavaScript 中,尝试访问不存在的对象属性是合法的。如果不存在,则返回 。 是 falsey,因此块中的代码不会运行。historywindow.historyundefinedundefinedif(undefined){}

评论

3赞 Mark Amery 2/6/2015
读者应该注意,像这样的方法是惯用的,用于检查 - 从浏览器中运行的 JavaScript 中 - 是否声明了全局变量,尤其是浏览器提供的全局变量(如历史 API)是否可用。它不适用于检查非全局变量是否为 或 ,如果您的 JavaScript 在浏览器外部(即在 Node.js 中)运行,它也不起作用。它还将处理设置为 的全局变量,或者与未声明的全局变量相同 或 或 ,这通常没问题。nullundefined0false''undefinednull
0赞 GreenAsJade 10/11/2016
这假定脚本在浏览器中运行。这不是给定的。
0赞 Jones Agyemang 3/6/2014 #8

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

10赞 Angelin Nadar 7/8/2014 #9

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

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;

评论

0赞 Mark 5/20/2016
这对我不起作用。我仍然收到错误:对于第一个示例。ReferenceError: s is not defined
5赞 Kapil 3/5/2015 #10

jQuery 检查元素不为空:

var dvElement = $('#dvElement');

if (dvElement.length  > 0) {
    // Do something
}
else{
    // Else do something else
}
106赞 Thamaraiselvam 5/7/2015 #11
if (typeof EmpName != 'undefined' && EmpName) {

如果 value 不是,则计算结果为 true:

  • 定义

  • 空字符串 (“”)

  • 0

评论

16赞 usefulBee 1/21/2016
我认为这是一种危险的技术,已经像野火一样蔓延开来。因为很多被检查的变量可能是布尔值或数字。因此,如果用户不完全了解后果,这是不好的。
0赞 villamejia 5/21/2016
请提供此 javascript especification 的参考
2赞 Rudy 11/11/2016
这与 相同。如果它已经是假的了。if (EmpName)undefined
2赞 Thamaraiselvam 11/12/2016
如果未定义变量。那么 if(EmpName) 将抛出错误
1赞 hungerstar 11/16/2016
@Thamaraiselvam我认为鲁迪可能是这个意思。其中变量已定义但未赋值。var EmpName; if (EmpName)
0赞 keshav 8/15/2015 #12
var x;
if (x === undefined) {
    alert ("only declared, but not defined.")
};
if (typeof y === "undefined") {
    alert ("not even declared.")
};

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

28赞 phil294 10/24/2015 #13

编辑后的答案:在我看来,你不应该使用我下面的旧答案中的函数。相反,你可能应该知道变量的类型,并直接使用“根据”检查(例如,想知道数组是否为空?只是做等)。这个答案甚至没有回答OP的问题。if(arr.length===0){}


我来为此编写自己的函数。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;
}

TypeScript 兼容。


这个函数应该像 PHPempty() 函数一样做同样的事情(参见RETURN VALUES)

将 、 、 、 、 视为空。undefinednullfalse00.0"0"{}[]

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

评论

2赞 5/22/2016
我遇到了一个小的空检查问题。我想检查传递的参数是 null 还是空对象。这是一个常见而愚蠢的语言问题,但我已经忘记了它。我所有的搜索都显示了未定义的空值或松散相等比较 ( == ) 的答案,但没有显示严格相等 ( === ) 或等效项。然后在页面最底部的 -1 排名答案中(在我点赞之前)是我躲避的答案。 或者也许 === 0,假设它永远不会是 -1。无论如何,赞成票为0,呜呜。:p{ }Object.keys( obj ).length < 1
0赞 Andy 6/5/2017
谢谢,我已经能够删除这个函数并清理很多代码。为什么这不是一个标准的 JS 函数,这超出了我的范围。
4赞 Ben McIntyre 6/7/2017
你应该把你所有的都改到这里,那么这将是一个合理的功能。=====
2赞 DanKodi 3/3/2016 #14

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

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

评论

0赞 temporary_user_name 4/5/2016
关闭,但没有。失去和比较直接出来,而不是作为字符串。这可行,但额外的运算符除了使其更冗长之外没有任何效果。typeofundefined
0赞 DanKodi 4/5/2016
在这种情况下,是的,你是对的,我们不需要使用 typeof。但是,在处理未定义的变量时,最好使用 typeof。使用 typeof 的一个原因是,如果尚未声明变量,它不会引发错误。
0赞 temporary_user_name 4/5/2016
这实际上是一件坏事。您不希望在代码中使用未声明的变量。你希望它抛出一个 ReferenceError,这样你就可以找到变量并声明它。当然,您不会在像 C++ 这样的编译语言中尝试这样做!仅仅因为 JS 允许它并不意味着它应该这样做。
1赞 Anthony Rutledge 5/21/2016
您的 or 语句是倒退的。检查某些内容是否未定义是第一步,而不是第二步。
3赞 Suhail 5/19/2016 #15

我在 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
-2赞 Nishanth Matha 5/25/2016 #16

最佳方法:

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

/* do your stuff */
}

评论

7赞 mickmackusa 5/24/2018
@jkindwall已于2013年10月11日提供了确切的解决方案。stackoverflow.com/a/19323555/2943403这个只有代码的帖子是完全无用的,因为它没有为页面增加任何新价值。事实上,它增加了页面膨胀,浪费了研究人员阅读它的时间。请删除此答案。
0赞 KARTHIKEYAN.A 12/4/2016 #17
var i;

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

评论

3赞 Chuck 12/7/2016
如果用户输入“未定义”一词会发生什么?
0赞 KARTHIKEYAN.A 12/7/2016
您的问题很好,它显示条件为真,因此我们需要将选项normal undefined更改为typeof condition。@Chuck
0赞 temporary_user_name 9/18/2017
这是错误的。 永远不会屈服,只有字符串。此外,如果 是 ,则已经为真,因此即使第二个布尔值有效,它也是多余的。typeofundefined'undefined'i == nulliundefined
2赞 mickmackusa 5/24/2018
@jkindwall已于 2013 年 10 月 11 日提供了此解决方案(条件相反)。stackoverflow.com/a/19323555/2943403 这个只有代码的帖子是完全无用的,因为它没有为页面增加任何新价值。事实上,它增加了页面膨胀,浪费了研究人员阅读它的时间。请删除此答案。
0赞 n1kkou 5/31/2017 #18

我仍然认为测试这两个条件的最佳/安全方法是将值转换为字符串:

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
}

评论

0赞 sadmicrowave 5/31/2017
您能解释一下为什么您认为这是执行测试的“最佳/安全方式”吗?
0赞 n1kkou 5/31/2017
由于转换始终返回“标准化”字符串(即 [object Undefined]),因此您不会因测试虚假值而遇到麻烦。这只是我根据真实/虚假价值观的经验得出的意见。
0赞 sadmicrowave 5/31/2017
谢谢你的解释。我不是在批评,这是一个有趣的答案,我只是想让你为其他人提供一些解释,说明为什么这可能优于其他方法。
0赞 n1kkou 5/31/2017
不用担心!我在这种类型的比较中遇到了很多问题,直到现在,我发现它是解决这个问题的最有用的方法。
-4赞 gideon 7/26/2017 #19

只需使用 typeof 即可检查值是否为 undefined 或 null:

if(typeof value == 'undefined'){

评论

0赞 Alex 7/26/2017
请参阅上一个答案 (stackoverflow.com/a/21273362/6305294) 中关于 typeof 的评论。
4赞 temporary_user_name 8/30/2017
这是不正确的。不接.我不明白为什么对一个多年前就给出了正确和完整答案的问题提供了新的、不正确的答案。你觉得目前的答案在某种程度上是不够的吗?null
3赞 Tony Tai Nguyen 12/12/2017 #20

使用以下解决方案:

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...

我能够检查以下内容:

  • 定义
  • 字符串 (“”)
  • 0

评论

0赞 temporary_user_name 2/14/2018
这并不能回答这个问题,即“我如何捕获 null 和 undefined?”,而不是“如何捕获 JavaScript 中的每个错误值?”
0赞 Tony Tai Nguyen 3/23/2018
@Aerovistae,我以为我用控制台做了.log(isDeepEqual(null, null));和控制台.log(isDeepEqual(undefined, undefined)); ?
2赞 Franklin Pious 5/27/2018 #21
(null == undefined)  // true

(null === undefined) // false

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

4赞 M. Arnold 5/28/2019 #22

最简单的检查方法是:

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

评论

1赞 byxor 6/30/2019
如果变量的值为 ,这将执行代码,这可能是不需要的。false
0赞 M. Arnold 7/1/2019
问题很清楚“如何确定变量是'undefined'还是'null'?”,在JavaScript中,如果变量的值为null或undefined,则其值为false。
2赞 byxor 7/1/2019
对不起,这是不正确的。这里有一个 JSfiddle 来证明这一点。
0赞 Alireza 8/1/2019
通过你的回答,,以及其他一些东西,如空字符串、+0、-0 和通过。 运算符将操作数 - 此处 - 强制转换为布尔值: ecma-international.org/ecma-262/#sec-tobooleanundefinednullNaNfalse!variable
0赞 M. Arnold 8/1/2019
但是检查问题:“如何确定变量是未定义还是 null”,!如果变量为 null 或未定义,则与 if 一起使用的操作数将始终返回 true。
10赞 agc 7/29/2019 #23

您可以简单地使用以下方法(我知道有更短的方法可以做到这一点,但这可能会使视觉观察更容易,至少对于查看代码的其他人来说是这样)。

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

来源: https://www.growthsnippets.com/how-can-i-determine-if-a-variable-is-undefined-or-null/

24赞 userPlus 8/15/2019 #24

最短和最简单的:

if(!EmpName ){
 // DO SOMETHING
}

如果 EmpName 为以下情况,这将计算为 true:

  • 定义
  • 字符串 (“”)
  • 0

评论

3赞 gast128 9/16/2019
这里的用例是我想知道 undefined 和 false 之间的区别。然后我将使用对 null 的检查。
13赞 Hardik Desai 11/7/2019 #25

JavaScript 中,据我所知,我们可以检查一个未定义的null的变量,如下所示。

if (variable === undefined){
}

if (variable === null){
}

if (variable === ''){
}

检查所有条件:

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

评论

1赞 dhilt 3/17/2020
var是一个保留词,这会抛出SyntaxError
0赞 Hardik Desai 7/1/2020
@dhilt从 var 到 variable 实现
56赞 Kamil Kiełczewski 1/7/2020 #26

可能最短的方法是:

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" 

以下是有关(来源在这里==)

Enter image description here

奖励:原因比(看agc答案)更清楚=====)

Enter image description here

评论

0赞 IceFire 5/1/2021
谢谢,很棒的答案!像 if(var) 或 if(!var) 这样的表达式呢?
0赞 Kamil Kiełczewski 5/1/2021
@IceFire示例区别:将执行值的代码。对于 var 的那些值,从不执行代码...if(var)/if(!var)true/falseif(var == null)
1赞 IceFire 5/1/2021
好吧,这是微不足道的,但是上面的矩阵之一也可以用来检查不同值的 if 表达式产生什么吗?
0赞 Kamil Kiełczewski 5/2/2021
@IceFire在我的回答中,有指向此 picutres 来源的链接 - 那里还有 if 语句“矩阵”
2赞 Anjana Kumari 2/11/2020 #27

让我们看看这个,

  1.  

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

    在上面,变量仅声明为 .在这种情况下,如果我们调用 method,它将显示 undefined。applealert

  2.  

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

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

因此,您可以检查值是 undefined 还是 null。

if(apple !== undefined || apple !== null) {
    // Can use variable without any error
}
2赞 dhilt 3/17/2020 #28

检查应该可以解决问题,并以最短的方式解决“未定义或空”的情况。(不考虑“foo 未申报”的情况。但是习惯于 3 等号(作为最佳实践)的人可能不会接受它。看看 eslint 和 tslint 中的 eqeqeq三等规则......foo == null

在这种情况下,当我们检查变量是变量还是单独变量时,应该应用显式方法,我对这个主题的贡献(现在是 27 个非否定答案!)是用作执行检查的简短而安全的方法。undefinednullvoid 0undefined

使用是不安全的,因为 undefined 不是保留字,可以被遮蔽 (MDN)。使用 check 是安全的,但是如果我们不关心 foo-is-undeclared 的情况,可以使用以下方法:foo === undefinedtypeof === 'undefined'

if (foo === void 0 || foo === null) { ... }
3赞 Ernesto 5/11/2020 #29

如果创建一个函数来检查它:

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;
}
-13赞 dkburd 3/31/2021 #30

最简单的答案:

if(!EmpName){
  // DO SOMETHING
};

评论

0赞 Tzahi Leh 10/7/2021
这样,您也定位了虚假值,例如 或 ,而我们只想定位 / 值0''nullishundefined
7赞 Ashan Priyadarshana 5/25/2021 #31

使用最新的 javascript 更改,您可以使用新的逻辑运算符来检查左操作数是否为 或 如果是,则分配右操作数的值。??=nullundefined

所以

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

相当于:

EmpName ??= 'some value';
1赞 Bhavya Koshiya 5/25/2022 #32

你可以做这样的事情,我认为在一个条件下对同一变量进行多值检查更有效

const x = undefined;
const y = null;
const z = 'test';

if ([undefined, null].includes(x)) {
  // Will return true
}

if ([undefined, null].includes(y)) {
  // Will return true
}

if ([undefined, null].includes(z)) {
  // Will return false
}
4赞 noseratio 7/14/2022 #33

似乎还没有人发布这个,所以我们开始吧:

a?.valueOf() === undefined可靠地适用于任一或 。nullundefined

以下作品与 OR 非常相似,但对于不喜欢😎的纯粹主义者来说可能更具吸引力a == nulla == undefined==

function check(a) {
  const value = a?.valueOf(); 
  if (value === undefined) {
    console.log("a is null or undefined");
  }
  else {
    console.log(value);
  }
}

check(null);
check(undefined);
check(0);
check("");
check({});
check([]);

顺便说一句,也有效:a?.constructor

function check(a) {
  if (a?.constructor === undefined) {
    console.log("a is null or undefined");
  }
}

check(null);
check(undefined);
check(0);
check("");
check({});
check([]);


更新:我们与 StackOverflow 成员一起制定了更好的方法

我个人会这样做:

if (Object.is(a ?? null, null)) {
  // a is null or undefined
}

评论

0赞 Константин Ван 5/30/2023
一个?.valueOf() === undefined 可靠地工作“....石明a = {valueOf() {}}
0赞 noseratio 5/30/2023
是的,你还应该提到,这可能是一件不那么愚蠢但同样无用的事情。这不是人类可能错误地引入的错误,它必须是故意的。否则,是的,它是 JavaScript,您可以随心所欲地破解它。a = Object.create(null)
1赞 Константин Ван 5/30/2023 #34

如果您想坚持使用运算符并澄清代码,您也可以这样做。(value ?? null) === null===


所以,到目前为止,有三种方式。

  • value == null
  • value === null || value === undefined
  • (value ?? null) === null

我通常会避免,但这一次,我更喜欢.==== null

评论

0赞 Константин Ван 5/30/2023
@noseratio-opentowork 好吧,你否定它,它会起作用的。
1赞 noseratio 5/30/2023
也许我错过了什么,但你为什么需要 ❓ 为什么不只是 ❓ Or, ❓Symbol()(a ?? null) === null(a ?? undefined) === undefined
1赞 Константин Ван 5/31/2023
@noseratio-opentowork 谢谢你指出来。我不必要地把它弄得太复杂了,当我写它时我也不明白自己。也许我试图检查它是否合并到第二个操作数中。