如何检查JavaScript对象是否包含null值或本身为null

8

假设我正在Java中访问一个名为jso的JavaScript对象,并使用以下语句来测试它是否为空

if (jso == null)

然而,当jso包含一些null值时,这个语句似乎会返回true,而这并不是我想要的结果。
有没有一种方法可以区分一个空JavaScript对象和一个包含一些null值的JavaScript对象?
谢谢。

你的意思是“未定义”吗? - Dave Newton
你试过三个等号吗?例如 '===' - javamonkey79
@javamonkey79:Java没有===,那是Javascript。 - Bhesh Gurung
@DaveNewton 是的,我是指未定义。对不起,我对JavaScript还不熟悉。 - mpang
@user1017528 不,我想我误解了;你的意思是区分空值和未设置的变量。要查看对象是否包含空值,您需要迭代对象值或使用已经实现此类功能的库(或带有谓词函数的函数)。 - Dave Newton
显示剩余2条评论
4个回答

19

要确定目标引用是否包含具有空值的成员,您需要自己编写函数,因为没有现成的函数可帮助您完成此操作。一个简单的方法是:

function hasNull(target) {
    for (var member in target) {
        if (target[member] == null)
            return true;
    }
    return false;
}

不用说,这只能向下递归一级,所以如果target上的一个成员包含另一个具有空值的对象,这仍将返回false。使用示例:

var o = { a: 'a', b: false, c: null };
document.write('Contains null: ' + hasNull(o));

将打印出:

包含 null:true

相比之下,以下代码将打印出false

var o = { a: 'a', b: false, c: {} };
document.write('Contains null: ' + hasNull(o));

6

这仅供参考,请不要点赞。

var jso;
document.writeln(typeof(jso)); // 'undefined'
document.writeln(jso); // value of jso = 'undefined'

jso = null;
document.writeln(typeof(jso)); // null is an 'object'
document.writeln(jso); // value of jso = 'null'

document.writeln(jso == null); // true
document.writeln(jso === null); // true
document.writeln(jso == "null"); // false

http://jsfiddle.net/3JZfT/3/


2
尝试使用额外的 =
if (jso === null)

1

这里有一个非常简单的方法来做到这一点

if (Object.values(jso).includes(null)) {
    // condition
}
else{
    // condition
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接