Answers:
您可以使用抽象相等运算符的品质来做到这一点:
if (variable == null){
// your code here.
}
因为null == undefined
为true,所以上面的代码将同时捕获null
和undefined
。
const y = undefined; y == null;
应该返回true
y
常量,但是您要比较abc
(不是y
)。当我在Chrome和Firefox上y
通过测试时,console.log(y == null);
得到了true
结果。如果遇到错误,则可能是尝试使用赋值运算符=
而不是比较==
,这将导致返回错误,因为const
无法重新赋值。
null
或undefined
变量相等时通过0
?问题不在于测试真实值,而在于明确测试null
或undefined
。
捕获null
并undefined
同时进行的标准方法是:
if (variable == null) {
// do something
}
-100%等同于更明确但不太简洁的代码:
if (variable === undefined || variable === null) {
// do something
}
编写专业JS时,理所当然的是类型相等,并且==
===
可以理解vs 的行为。因此,我们==
仅使用和进行比较null
。
暗示使用的评论typeof
是完全错误的。是的,如果变量不存在,上述解决方案将导致ReferenceError。这是一件好事。此ReferenceError是可取的:它将帮助您发现错误并在交付代码之前解决它们,就像其他语言中的编译器错误一样。如果使用输入,则无法使用try
/ catch
进行控制。
您的代码中不应包含对未声明变量的任何引用。
!==
不是!=
。
undefined
正如任何已声明但未初始化的变量一样,它们被声明并具有值,即,var someVar;
因此您的论点并没有真正成立
结合以上答案,似乎最完整的答案是:
if( typeof variable === 'undefined' || variable === null ){
// Do stuff
}
这对于未声明或已声明并且显式设置为null或undefined的任何变量均适用。对于任何具有实际非空值的已声明变量,布尔表达式的求值应为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) {
如果值不是,则将评估为true:
空值
未定义
N
空字符串(“”)
0
假
if (EmpName)
。如果undefined
已经是虚假的。
var EmpName; if (EmpName)
。定义变量但未分配值的位置。
jQuery attr()
函数返回一个空字符串或实际值(从不null
或undefined
)。它唯一返回的时间undefined
是您的选择器未返回任何元素时。
因此,您可能要针对空白字符串进行测试。另外,由于空白字符串,null和undefined为false-y,因此您可以执行以下操作:
if (!EmpName) { //do something }
ReferenceError: EmpName is not defined
undefined
如果该属性在元素上不存在,jQuery将返回(不仅仅是根据选择器,如果选择器没有匹配的元素)。例如,img
没有src
就返回undefined
了$('img').attr('src');
我来为此编写自己的函数。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()
RETURN VALUES
认为undefined
,null
,false
,0
,0.0
,"0"
{}
,[]
为空。
"0.0"
,NaN
," "
,true
被视为非空。
{ }
。这是一个常见且愚蠢的语言问题,但我已经忘记了。我所有的搜索都显示未定义的空值或宽松的相等比较(==)的答案,但没有严格的相等(===)或等效的答案。然后,在页面最底部(在我投票之前),您在-1排名中的答案就是我无法回答的答案。 Object.keys( obj ).length < 1
或=== 0(假设永远不会为-1)。无论如何,提高到0,求爱。:p
==
到===
这里,那么这将是一个合理的功能。
如果要检查的变量是全局变量,请执行
if (window.yourVarName) {
// Your code here
}
即使yourVarName
变量不存在,这种检查方式也不会引发错误。
if (window.history) {
history.back();
}
window
是一个对象,其中包含所有全局变量作为其属性,并且在JavaScript中尝试访问不存在的对象属性是合法的。如果history
不存在,则window.history
返回undefined
。undefined
是错误的,因此if(undefined){}
块中的代码将无法运行。
null
或undefined
,如果您的JavaScript在浏览器外部(即在Node.js中)运行,则也将不起作用。它也将把全局设置0
,false
还是''
一样的那些未声明或undefined
或null
,通常是罚款。
我只是有这个问题,即检查对象是否为空。
我只是用这个:
if (object) {
// Your code
}
例如:
if (document.getElementById("enterJob")) {
document.getElementById("enterJob").className += ' current';
}
由于您使用的是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;
ReferenceError: s is not defined
对于第一个示例。
最简单的检查方法是:
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
使用以下解决方案:
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或未定义,请使用以下代码。
if(typeof sVal === 'undefined' || sVal === null || sVal === ''){
console.log('variable is undefined or null');
}
typeof
和比较而undefined
不是字符串。这行得通,但是额外的运算符只会使它变得更冗长,而没有其他作用。
我在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
让我们看一下
let apple; // Only declare the variable as apple
alert(apple); // undefined
在上面,变量仅声明为apple
。在这种情况下,如果调用方法alert
,它将显示未定义。
let apple = null; /* Declare the variable as apple and initialized but the value is null */
alert(apple); // null
在第二个中,它显示为null,因为变量为 apple
value的为null。
因此,您可以检查值是未定义的还是null。
if(apple !== undefined || apple !== null) {
// Can use variable without any error
}
最好的办法:
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')
}
typeof
永远不会屈服undefined
,只会字符串'undefined'
。此外,i == null
如果i
is 为真,则为true undefined
,因此第二个布尔值即使有效也将是多余的。
该foo == null
检查应该可以解决问题,并以最短的方式解决“ undefined OR null”情况。(不考虑“没有声明foo”的情况。)但是,过去拥有3个等号(作为最佳实践)的人可能不会接受它。只要看看eqeqeq或三等式在eslint和tslint规则...
在这种情况下,应使用显式方法(当我们检查变量是否是变量undefined
或null
单独变量时),而我对该主题的贡献(目前有27个非否定答案!)void 0
既用作执行检查的又简短又安全的方法为undefined
。
使用foo === undefined
不安全,因为undefined不是保留字,可能会被屏蔽(MDN)。使用typeof === 'undefined'
check是安全的,但是如果我们不关心foo-is-undeclared情况,则可以使用以下方法:
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;
}
我仍然认为测试这两个条件的最佳/安全方法是将值转换为字符串:
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
}
您可以使用typeof来检查该值是未定义还是为null:
if(typeof value == 'undefined'){
null
。我不明白,为什么对许多年前已经给出正确和完整答案的问题提供了新的,错误的答案。您是否认为当前答案有些不足?
if(x==null)
在JavaScript中是个坏主意。判断为"=="
-可能会导致意外的类型强制,并且CoffeeScript无法读取它,
在条件判断中切勿使用“ ==”或“!=”!
if(x)
会更好,但请注意0和“”。它会被当作假的,不是平等法"!= null"
是真实的。
请参阅JavaScript最佳做法。
==
要比较的null
是在追赶的标准方式null
,并undefined
在JS。==
在这种特定情况下,强制使用type强制不是风险,实际上已被利用来实现同时捕获null
和undefined
同时捕获的目标。在选择为几年前令人满意地解决的问题提供错误和误导性的答案之前,请花更多的时间使用该语言。