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

如何确定变量是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解释器会停止执行。

3215191 次浏览

您可以使用抽象等号操作符的属性来执行此操作:

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

因为null == undefined为true,所以上面的代码将同时捕获nullundefined

jQueryattr()函数返回空白字符串或实际值(永远不会nullundefined)。它返回undefined的唯一时间是您的选择器没有返回任何元素。

所以你可能想针对空白字符串进行测试。或者,由于空白字符串、null和untex是false-y,你可以这样做:

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

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

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

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

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

if (object) {// Your code}

例如:

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

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

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

这是100%等价于更明确但不那么简洁:

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

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


再次编辑

建议使用typeof的注释仅仅是错。是的,如果变量不存在,我上面的解决方案将导致一个引用错误。这是一件好事。这个引用错误是可取的:它将帮助你找到错误并在发布代码之前修复它们,就像其他语言中的编译器错误一样。如果你使用的是无法控制的输入,请使用try/catch

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

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

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

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

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

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

这是如何工作的:

window是一个包含所有全局变量作为其属性的对象,在JavaScript中,尝试访问不存在的对象属性是合法的。如果history不存在,那么window.history返回undefinedundefined是false sey,所以if(undefined){}块中的代码不会运行。

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

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

var s; // undefinedjQuery.isEmptyObject(s); // will return true;
s = null; // defined as nulljQuery.isEmptyObject(s); // will return true;
// usageif(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 valuejQuery.isEmptyObject(s); // will return false;

jQuery检查元素不为空:

var dvElement = $('#dvElement');
if (dvElement.length  > 0) {// Do something}else{// Else do something else}
if (typeof EmpName != 'undefined' && EmpName) {

如果value不是,则将评估为true:

  • <强>空

  • 未定义

  • <说明>NaN

  • 空字符串 ("")

  • <说明>0

  • <强>假

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

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

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


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


这个函数应该像PHP的#0函数一样做完全(见RETURN VALUES

认为undefinednullfalse00.0"0"{}[]为空。

"0.0"NaN" "true被认为是非空的。

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

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

我在Chrome控制台中运行此测试。使用(valid0)您可以检查未定义:

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

最佳方式:

if(typeof variable==='undefined' || variable===null) {
/* do your stuff */}
var i;
if (i === null || typeof i === 'undefined') {console.log(i, 'i is undefined or null')}else {console.log(i, 'i has some value')}

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

var EmpName = $("div#esd-names div#name").attr('class');
// Undefined checkif (Object.prototype.toString.call(EmpName) === '[object Undefined]'){// Do something with your code}
// Nullcheckif (Object.prototype.toString.call(EmpName) === '[object Null]'){// Do something with your code}

您可以通过简单地使用typeof检查该值是否未定义或为null:

if(typeof value == 'undefined'){

if(x==null)在JavaScript中是个坏主意。判断"=="-它可能会导致意外的类型强制,并且CoffeeScript无法读取它,永远不要在条件判断中使用“==”或 "! =" !

if(x)会更好,但要小心0和“”。它将被视为虚假,而不是与"!= null"相等的方法是真正

在此输入图片描述

JavaScript的最佳实践

使用下面的解决方案:

const getType = (val) => typeof val === 'undefined' || !val ? null : typeof val;const isDeepEqual = (a, b) => getType(a) === getType(b);
console.log(isDeepEqual(1, 1)); // trueconsole.log(isDeepEqual(null, null)); // trueconsole.log(isDeepEqual([], [])); // trueconsole.log(isDeepEqual(1, "1")); // falseetc...

我可以检查以下内容:

  • null
  • 未定义
  • NaN
  • string("")
  • 虚假
(null == undefined)  // true
(null === undefined) // false

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

最简单的检查方法是:

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

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

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/

最短和最简单的:

if(!EmpName ){// DO SOMETHING}

这将评估true,如果EMPName是:

  • null
  • 未定义
  • NaN
  • string("")
  • 虚假

javascript中,根据我的知识,我们可以检查未定义null变量,如下所示。

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

检查所有条件:

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

可能最短的方法是:

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" caseconsole.log('---\n"true" is:', true);console.log('"void 0" is:', void 0);log(void 0,void 0); // "void 0" is "undefined" 

这里有更多关于==的细节(来源这里

在此处输入图片描述

奖金:为什么=====更清楚(看看agc答案

在此处输入图片描述

我们来看看这个,

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

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

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

In the second one it displays null, because variable of apple value is null.

So you can check whether a value is undefined or null.

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

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

当我们分别检查变量是undefined还是null时,显式方法应该应用于这种情况下,我对这个主题的贡献(目前有27个非否定答案!)是使用void 0作为对undefined执行检查的简短而安全的方法。

使用foo === undefined是不安全的,因为未定义不是保留字,可以被遮蔽(MDN)。使用typeof === 'undefined'检查是安全的,但如果我们不关心foo-is-un声明的情况,可以使用以下方法:

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

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

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;}

最简单的答案:

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

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

那么,

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

相当于:

EmpName ??= 'some value';

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}

似乎还没有人发布这个,所以在这里我们去:

a?.valueOf() === undefined可以可靠地用于nullundefined

下面的工作原理非常类似于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([]);