如何确定变量是 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 解释器会停止执行。
您可以使用 abstract equality operator 的特性来执行此操作:
if (variable == null){
// your code here.
}
因为 null == undefined
为真,所以上面的代码将同时捕获 null
和 undefined
。
同时捕获 null
和 undefined
的标准方法是:
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 是可取的:它会帮助您在发布代码之前发现错误并修复它们,就像其他语言中的编译器错误一样。如果您正在处理您无法控制的输入,请使用 try
/catch
。
您不应在代码中引用任何未声明的变量。
!==
而不是 !=
。
undefined
的值,就像任何已声明但未初始化的变量一样,即 var someVar;
,因此您的论点并没有真正成立
结合以上答案,似乎最完整的答案是:
if( typeof variable === 'undefined' || variable === null ){
// Do stuff
}
这应该适用于任何未声明或已声明并显式设置为 null 或未定义的变量。对于具有实际非空值的任何已声明变量,布尔表达式的计算结果应为 false。
typeof
是一个运算符,而不是一个函数,所以它不需要括号,但我仍然很欣赏括号 - 只是为了阅读清晰。
variable == null
if (variable == null) {
// Do stuff, will only match null or undefined, this won't match false
}
undefined
等于 null
。
==
已损坏的参考资料。这个答案中的强制 if(variable == null)
对我来说完全有意义......
if (typeof EmpName != 'undefined' && EmpName) {
如果 value 不是,将评估为 true:
无效的
不明确的
钠
空字符串 ("")
0
错误的
if (EmpName)
相同。如果它是 undefined
就已经是假的了。
var EmpName; if (EmpName)
。变量已定义但未分配值的位置。
可能最短的方法是:
if(EmpName == null) { /* DO SOMETHING */ };
这是证据:
函数检查(EmpName){如果(EmpName == null){返回真; };返回假; } var log = (t,a) => console.log(`${t} -> ${check(a)}`);日志('空',空);日志('未定义',未定义);日志('NaN',NaN);日志('””', ””);日志('{}', {});日志('[]', []);日志('[1]', [1]);日志('[0]', [0]);日志('[[]]', [[]]);日志('真',真);日志('假',假);日志('“真”',“真”);日志('"假"', "假");日志('无穷大',无穷大); log('-无穷大', -无穷大);日志('1',1);日志('0',0);日志('-1',-1);日志('"1"', "1");日志('"0"', "0");日志('"-1"', "-1"); // "void 0" case console.log('---\n"true" is:', true); console.log('"void 0" is:', void 0);日志(无效 0,无效 0); // “void 0”是“未定义”
以下是有关 ==
的更多详细信息(来源 here)
https://i.stack.imgur.com/nkpj6.png
奖励:===
比 ==
更清晰的原因(查看 agc answer)
https://i.stack.imgur.com/7MeG6.png
if(var)/if(!var)
将为值 true/false
执行代码。 var 的那些值的 if(var == null)
永远不会执行代码...
jQuery attr()
函数返回一个空白字符串或实际值(从不返回 null
或 undefined
)。它返回 undefined
的唯一时间是您的选择器没有返回任何元素。
因此,您可能希望针对空白字符串进行测试。或者,由于空白字符串、null 和 undefined 是 false-y,您可以这样做:
if (!EmpName) { //do something }
ReferenceError: EmpName is not defined
undefined
(不仅仅是如果选择器没有匹配的元素,根据答案)。例如,没有 src
的 img
将为 $('img').attr('src');
返回 undefined
编辑的答案:在我看来,你不应该使用我下面的旧答案中的功能。相反,您可能应该知道变量的类型并直接使用根据检查(例如,想知道数组是否为空?只需执行 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 的 empty()
function 相同的事情(参见 RETURN VALUES
)
将 undefined
、null
、false
、0
、0.0
、"0"
{}
、[]
视为空。
"0.0"
、NaN
、" "
、true
被视为非空。
{ }
。这是一个常见且愚蠢的语言问题,但我忘记了。我所有的搜索都显示了未定义空值或松散相等比较 ( == ) 的答案,但不显示严格相等 ( === ) 或等效的答案。然后在页面最底部的 -1 排名答案中(在我投票之前)是我无法理解的答案。 Object.keys( obj ).length < 1
或者可能 === 0,假设它永远不会是 -1。无论如何,投票给0,哇。 :p
==
的 all 更改为 ===
,那么这将是一个合理的功能。
最短和最简单的:
if(!EmpName ){
// DO SOMETHING
}
如果 EmpName 是,这将评估 true:
无效的
不明确的
钠
空的
细绳 (””)
0
错误的
如果要检查的变量是全局变量,请执行
if (window.yourVarName) {
// Your code here
}
即使 yourVarName
变量不存在,这种检查方式也不会引发错误。
示例:我想知道我的浏览器是否支持 History API
if (window.history) {
history.back();
}
这是如何工作的:
window
是一个将所有全局变量作为其属性的对象,在 JavaScript 中,尝试访问不存在的对象属性是合法的。如果 history
不存在,则 window.history
返回 undefined
。 undefined
是错误的,因此 if(undefined){}
块中的代码不会运行。
null
还是 undefined
,如果您的 JavaScript 在浏览器之外运行(即在 Node.js 中),它也不起作用。它还会将设置为 0
、false
或 ''
的全局变量与未声明或 undefined
或 null
的全局变量相同,这通常很好。
在 JavaScript 中,据我所知,我们可以检查一个未定义的、空的或空的变量,如下所示。
if (variable === undefined){
}
if (variable === null){
}
if (variable === ''){
}
检查所有条件:
if(variable === undefined || variable === null || variable === ''){
}
var
是保留字,这将抛出 SyntaxError
由于您使用的是 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;
ReferenceError: s is not defined
第一个示例。
我刚刚遇到了这个问题,即检查对象是否为空。我只是使用这个:
if (object) {
// Your code
}
例如:
if (document.getElementById("enterJob")) {
document.getElementById("enterJob").className += ' current';
}
您可以简单地使用以下方法(我知道有更短的方法可以做到这一点,但这可能更容易直观地观察,至少对于其他查看代码的人来说)。
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/
jQuery 检查元素不为空:
var dvElement = $('#dvElement');
if (dvElement.length > 0) {
// Do something
}
else{
// Else do something else
}
最简单的检查方法是:
if(!variable) {
// If the variable is null or undefined then execution of code will enter here.
}
false
,这将执行代码,这可能是不可取的。
undefined
、null
和 其他一些内容(例如空字符串、+0、-0 NaN
和 false
)可以通过。 !
运算符将操作数(此处为 variable
)强制为布尔值:ecma-international.org/ecma-262/#sec-toboolean
通过最新的 javascript 更改,您可以使用新的逻辑运算符 ??=
来检查左操作数是 null
还是 undefined
,如果是,则分配右操作数的值。
所以,
if(EmpName == null){ // if Variable EmpName null or undefined
EmpName = 'some value';
};
相当于:
EmpName ??= 'some value';
我在 Chrome 控制台中运行此测试。使用 (void 0) 您可以检查未定义:
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
使用以下解决方案:
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
错误的
要测试变量是否为空或未定义,我使用以下代码。
if(typeof sVal === 'undefined' || sVal === null || sVal === ''){
console.log('variable is undefined or null');
}
typeof
并直接与 undefined
进行比较,而不是作为字符串。这可行,但额外的运算符没有任何作用,只是让它变得更冗长。
如果您创建一个函数来检查它:
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;
}
(null == undefined) // true
(null === undefined) // false
因为 === 检查类型和值。两者的类型不同,但值相同。
让我们看看这个,
让苹果; // 只将变量声明为apple alert(apple); // undefined 在上面,变量只被声明为apple。在这种情况下,如果我们调用方法 alert 它将显示 undefined。让苹果=空; /* 将变量声明为 apple 并初始化,但值为 null */ alert(apple); // 无效的
在第二个中它显示 null,因为 apple
值的变量为 null。
所以你可以检查一个值是未定义的还是空的。
if(apple !== undefined || apple !== null) {
// Can use variable without any error
}
foo == null
检查应该可以解决问题并以最短的方式解决“未定义或空”的情况。 (不考虑“未声明 foo”的情况。)但是习惯了 3 个等于(作为最佳实践)的人可能不会接受它。看看 eslint 和 tslint 中的 eqeqeq 或 triple-equals 规则...
当我们分别检查变量是 undefined
还是 null
时,应该在这种情况下应用显式方法,我对这个主题的贡献(目前有 27 个非否定答案!)是使用 void 0
作为对 undefined
执行检查的既短又安全的方法。
使用 foo === undefined
是不安全的,因为 undefined 不是保留字并且可以被隐藏 (MDN)。使用 typeof === 'undefined'
检查是安全的,但如果我们不关心 foo-is-undeclared 的情况,可以使用以下方法:
if (foo === void 0 || foo === null) { ... }
你可以做这样的事情,我认为在一个条件下对同一个变量进行多值检查更有效
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
}
调用 typeof null 返回一个值“object”,因为特殊值 null 被认为是一个空对象引用。 Safari 通过版本 5 和 Chrome 通过版本 7 有一个怪癖,在正则表达式上调用 typeof 返回“function”,而所有其他浏览器返回“object”。
var x;
if (x === undefined) {
alert ("only declared, but not defined.")
};
if (typeof y === "undefined") {
alert ("not even declared.")
};
您只能使用第二个:因为它将检查定义和声明
var i;
if (i === null || typeof i === 'undefined') {
console.log(i, 'i is undefined or null')
}
else {
console.log(i, 'i has some value')
}
typeof
永远不会产生 undefined
,只会产生字符串 'undefined'
。此外,如果 i
是 undefined
,则 i == null
已经为真,因此即使它有效,第二个布尔值也是多余的。
我仍然认为测试这两个条件的最佳/安全方法是将值转换为字符串:
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
}
似乎没有人需要发布这个,所以我们开始吧:
a?.valueOf() === undefined
可靠地为 null
或 undefined
工作。
以下内容与 a == null
或 a == undefined
非常相似,但对于不喜欢 ==
的纯粹主义者来说可能更有吸引力😎
函数 check(a) { 常量值 = a?.valueOf(); if (value === undefined) { console.log("a is null or undefined"); } else { console.log(value); } } 检查(空);检查(未定义);检查(0);查看(””);查看({});查看([]);
附带说明一下,a?.constructor
也可以:
function check(a) { if (a?.constructor === undefined) { console.log("a is null or undefined"); } } 检查(空);检查(未定义);检查(0);查看(””);查看({});查看([]);
const y = undefined; y == null;
它应该返回true
y
为常量,但您需要比较abc
(不是y
)。当我在 Chrome 和 Firefox 上通过console.log(y == null);
测试y
时,我得到了true
。如果您遇到错误,那么您可能尝试使用赋值运算符=
而不是比较==
,这将返回错误,因为无法重新分配const
。undefined !== null
--> 真undefined == null
-->真的