首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >检查JavaScript变量是否为falsey或空数组或对象的最有效方法是什么?

检查JavaScript变量是否为falsey或空数组或对象的最有效方法是什么?
EN

Stack Overflow用户
提问于 2017-12-25 20:54:29
回答 3查看 228关注 0票数 1

我有一个用例,其中一个函数接收一个变量,该变量可以是各种类型的,包括数组或对象引用。

但我想忽略任何传入的变量,这些变量在通常的JavaScript意义上是假的,另外,我想把空数组[]和空对象{}视为也是假的。

我可以立即看到有很多方法可以做到这一点,但我想知道,假设有一个非常现代的JavaScript实现,并且只有普通的JavaScript,没有框架,那么什么才是最有效的。

最明显的方法是检查它是数组还是对象,如果是数组,则检查.length,如果是对象,则检查Object.keys(x).length。但考虑到其他一些已经是假的东西也是typeof object,而且空数组似乎表现得要么是真的,要么是假的,这取决于你如何检查,我敢打赌,有些方法更有效,也可能更惯用。

EN

回答 3

Stack Overflow用户

发布于 2017-12-25 21:17:38

下面的内容应该符合你的标准(尽管它看起来很丑陋)。

代码语言:javascript
运行
复制
if (
     sth &&                                                     // normal JS coercion
     (!Array.isArray(sth) || sth.length) &&                     // falsify empty arrays
     (Object.getPrototypeOf(sth) !== Object.prototype || Object.keys(sth).length)     // falsify empty objects
   ) 
alert("pass");

测试:

代码语言:javascript
运行
复制
sth = [];                 // Don't Pass
sth = {};                 // Don't Pass
sth = null;               // Don't Pass
sth = false;              // Don't Pass
sth = undefined;          // Don't Pass
sth = "";                 // Don't Pass
sth = [1];                // Pass
sth = { a: "" }           // Pass
sth = new Date;           // Pass
sth = "a";                // Pass
sth = function(){}        // Pass
票数 1
EN

Stack Overflow用户

发布于 2017-12-25 20:57:55

这将检查sth是否为真:

代码语言:javascript
运行
复制
 if(sth && (typeof sth !== "object" || Object.keys(sth).length))
   alert("passes");
票数 0
EN

Stack Overflow用户

发布于 2017-12-27 10:45:18

我一直都在用这个。

代码语言:javascript
运行
复制
function IsEmpty(val){
    return (!val || val == "" || (typeof(val) === "object" && Object.keys(val).length == 0) || val === [] || val === null || val === undefined);
} 

通过的示例

代码语言:javascript
运行
复制
if(IsEmpty(false)){console.log("pass");}
if(IsEmpty("")){console.log("pass");}
if(IsEmpty([])){console.log("pass");}
if(IsEmpty({})){console.log("pass");}
if(IsEmpty(null)){console.log("pass");}
if(IsEmpty()){console.log("pass");}

失败的例子

代码语言:javascript
运行
复制
if(IsEmpty(true)){console.log("fail");}
if(IsEmpty("not null")){console.log("fail");}
if(IsEmpty([1])){console.log("fail");}
if(IsEmpty({"a":1})){console.log("fail");}

//!IsEmpty means is not empty
if(!IsEmpty(false)){console.log("fail");}
if(!IsEmpty("")){console.log("fail");}
if(!IsEmpty([])){console.log("fail");}
if(!IsEmpty({})){console.log("fail");}
if(!IsEmpty()){console.log("fail");}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47968851

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档