关于javascript:如何确定变量是”未定义”还是”空”?undefined’ or ‘null’?

How to determine if variable is 'undefined' or 'null'?

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

1
2
3
4
var EmpName = $("div#esd-names div#name").attr('class');
if(EmpName == 'undefined'){
  //DO SOMETHING
};
1
 

但如果我这样做,javascript解释器将停止执行。


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

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

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


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

1
2
3
if (variable == null) {
     // do something
}

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

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

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

再次编辑

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

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


结合以上答案,最完整的答案应该是:

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

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


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


1
if (typeof EmpName != 'undefined' && EmpName) {

如果值不是:

  • 无效的

  • 未定义

  • 空字符串(")


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

因此,您可能需要对空字符串进行测试。或者,由于空字符串、空字符串和未定义字符串都是false-y,您可以这样做:

1
if (!EmpName) { //do something }


如果要检查的变量是全局变量,请执行以下操作:

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

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

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

1
2
3
if (window.history) {
    history.back();
}

如何运作:

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


我是来为这个写我自己的函数的。javascript很奇怪

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
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;
}

打字稿兼容。

编辑。这个函数应该做与phps empty()函数完全相同的事情(见RETURN VALUES)

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

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


因为您使用的是jquery,所以可以通过使用单个函数来确定变量是未定义的还是其值为空。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
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;


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

1
if (object) { Somecode}

1
2
if (document.getElementById("enterJob"))
  document.getElementById("enterJob").className += ' current';


jquery check元素不为空

1
2
3
4
5
6
7
8
var dvElement = $('#dvElement');

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

解决方案如下:

1
2
3
4
5
6
7
8
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...

我可以检查以下内容:

  • 无效的
  • 未定义
  • 空的
  • 字符串("")


我在chrome控制台上运行这个测试,使用(void 0)可以检查未定义的

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
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

最佳方式:

1
2
3
4
if(typeof variable==='undefined' || variable===null) {

/* do your stuff */
}


1
2
3
4
5
6
7
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检查值是否未定义或为空:

1
if(typeof value == 'undefined'){


1
2
3
(null == undefined)  // true

(null === undefined) // false

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


我看到原来的帖子使用的是jquery。所以我要通过jquery添加我过去使用过的内容。通常,当我执行这样的检查时,我不必为了这个目的检查值是否为空或未定义。更像是"这里的值是这样我就可以对它执行操作。"为此,我使用以下内容。我没有尝试过每种类型,但我知道它适用于空值和未定义值。另外,对象和数组(这些对象和数组的空版本将返回true)。当然,如果变量不存在,您会得到一个异常,但是我真诚地尽力避免这种情况。所以我同意航空摄影。我想在我的代码中知道这一点,不想跳过它。

1
2
3
if ($.trim(value) != '') {
   //Do Something
}

调用typeof NULL返回"object"的值,因为特殊值NULL被视为空对象引用。Safari到第5版和Chrome到第7版都有一个怪癖,在这个怪癖中,对正则表达式调用typeof返回"function",而所有其他浏览器都返回"object"。


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

1
2
3
4
5
6
7
8
9
10
11
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
}


1
2
3
4
5
6
7
var x;
if (x === undefined) {
    alert ("only declared, but not defined.")
};
if (typeof y ==="undefined") {
    alert ("not even declared.")
};

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


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

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


if(x==null)在javascript中是个坏主意,用"=="判断可能会导致意外的类型强制,不能被咖啡脚本读取。切勿使用"="或"!="状态判断!

if(x)会更好,但如果是0和",则会被视为错误,与"!= null"不相等的方法是正确的。

enter image description here

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