确定对象的有效性

时间:2013-12-18 19:54:23

标签: javascript

上下文

我正在尝试确保在使用它之前传递给函数的对象是有效的。我想知道这两种方法之间是否存在任何差异,一种语法比另一种语法更冗长。如果现代用户代理(如Chrome,IE,FF等)使用的所有JavaScript引擎的功能和行为相同,我宁愿使用更简单的版本。如果没有,我想使用安全投注,所以无论JavaScript引擎的实现如何,我的代码都按照我的意图行事。

问题

鉴于以下功能,有两个陈述,如评论部分所示 无论JS引擎(或用户代理)如何,语句1是否与语句2产生相同的结果?为什么或为什么不呢?

function f(obj) {
   if(obj) { // statement 1
     console.log('obj is valid');
   }
   if(obj !== null && obj!==undefined) { // statement 2
     console.log('obj is invalid');
   }
}

1 个答案:

答案 0 :(得分:6)

不,他们是不同的。

if (obj)测试 truthy 值。在JavaScript中,除了""0falseNaNnullundefined之外,一切都很简洁(可能还有一些我忘了......)

但是,如果其中一个假值是你可以使用的值,例如零或falsequantity为零是完全合法的值,falseisTotallyLame。所以你需要一个允许这些值通过的测试。您需要测试存在

if (obj!==null && obj!==undefined)测试存在。只有nullundefined才会通过测试。这意味着空字符串"",零0或甚至false都是有效值,因为它们是设定值。


但是,正如@Tim所说,存在的首选标准测试如下:

if (typeof obj !== "undefined" && obj !== null)