javascript - none - null和undefined的差异




如何确定变量是'undefined'还是'null'? (16)

jQuery attr()函数返回空字符串或实际值(并且永远不会为nullundefined )。 它返回undefined的唯一时间是当你的选择器没有返回任何元素。

所以你可能想要测试一个空白的字符串。 或者,由于空白字符串,null和undefined都是false-y,所以你可以这样做:

if (!EmpName) { //do something }

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


jQuery检查元素不为null

var dvElement = $('#dvElement');

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

使用下面的解决方案:

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

我可以检查以下内容:

  • 空值
  • 未定义
  • 为NaN
  • 字符串(“”)
  • 0

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

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

- 这是100%相当于更明确,但不那么简洁:

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

在编写专业JS时,我们理解[类型相等和== vs === ]的行为[1]是理所当然的。 因此我们使用==并且只比较null

再次编辑

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

您不应该在代码中引用未声明的变量。


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

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

因为null == undefined是真的,所以上面的代码会同时捕获nullundefined


您可以通过简单地使用typeof来检查值是未定义的还是null:

if(typeof value == 'undefined'){

我喜欢使用这个:

if (!!variable) {
   //do something
}

它捕获nullundefined


我在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

我来写我自己的功能... 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;
    }

打字稿兼容。

编辑。 这个函数应该和PHP的empty()函数 完全一样(请参阅RETURN VALUES

考虑undefinednullfalse0.0"0" {}[]为空。

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


最好的办法:

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

/* do your stuff */
}

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

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

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


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

    if(sVal === '' || sVal === null ||typeof sVal === 'undefined'){
    console.log('variable is undefined or 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
}

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

如果值不是:则评估为真:

  • 空值

  • 未定义

  • 为NaN

  • 空字符串(“”)

  • 0


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 x;
if (x === undefined) {
    alert ("only declared, but not defined.")
};
if (typeof y === "undefined") {
    alert ("not even declared.")
};

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





undefined