26

我似乎经常使用这个测试

if( object && object !== "null" && object !== "undefined" ){
    doSomething();
}

我从objects服务调用或读取 cookie 中返回(因为不同的浏览器返回不同的值nullundefined"null""undefined")。

有没有更简单/更有效的方法来做这个检查?

4

10 回答 10

39

我认为你不能让它变得更简单,但你当然可以将该逻辑重构为一个函数:

function isRealValue(obj)
{
 return obj && obj !== 'null' && obj !== 'undefined';
}

然后,至少你的代码变成:

if (isRealValue(yourObject))
{
 doSomething();
}
于 2012-09-21T17:42:03.387 回答
11

如果你有 jQuery,你可以使用$.isEmptyObject().

$.isEmptyObject(null)
$.isEmptyObject(undefined)
var obj = {}
$.isEmptyObject(obj)

所有这些调用都将返回 true。希望能帮助到你

于 2013-12-06T20:58:02.717 回答
5
if(!!object){
  doSomething();
}
于 2017-10-26T10:50:06.683 回答
3

如果object是真的,我们已经知道它不是nullundefined(假设字符串值是错误的)。我假设需要一个非null和非undefined测试。

如果是这样,一个简单的比较nullorundefined就是比较!= null

if( object != null ){
    doSomething();
}

仅当is not或时,该doSomething函数才会运行。objectnullundefined

于 2012-09-21T17:46:06.503 回答
2

也许像这样

   if (typeof object !== "undefined" || object !== null)
    // do something
于 2012-09-21T17:38:43.400 回答
2

也许是这样的:

var myObj = {};
var isEmptyObj = !Object.keys(myObj).length;

if(isEmptyObj) {
    // true
} else {
于 2018-10-11T19:00:40.817 回答
1

这应该没有任何问题。

if(object){ // checks for null and undefined
    doSomething();
}
于 2019-11-14T10:23:24.073 回答
1

检查对象是否为空的最佳方法是使用如下所示的实用程序函数。

创建一个函数

function isEmpty(obj) {
    for(var key in obj) {
        if(obj.hasOwnProperty(key))
            return false;
    }
    return true;
}

通过以下方式使用上述功能:-

所以如果你有一个空对象,你可以使用上面的函数来检查它是否为空。

var myObj = {}; // Empty Object
if(isEmpty(myObj)) {
    // Object is empty (Would return true in this example)
} else {
    // Object is NOT empty
}
于 2019-11-28T06:15:44.790 回答
0

我认为您可以通过以下方式简化您的逻辑:

if (object != null && typeof(object) == "object") {
    doSomething();
}

主要的问题是如果你只是检查typeof(object) == "object",它会返回trueif objectis nullsince null's type is "object"。但是,如果您首先检查 ,object != null则可以确定您所拥有的东西既不是undefined也不是null

于 2019-02-13T13:55:32.327 回答
0

另一种简单的方法是

if (eval(object)) doSomething();

您可以使用 eval 转换任何类型,包括字符串并由 javascript 执行,这里是 eval 文档

于 2021-11-18T14:48:54.103 回答