确定对象的有效性

Leo*_*Nix 2 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');
   }
}
Run Code Online (Sandbox Code Playgroud)

Ale*_*yne 6

不,他们是不同的.

if (obj)测试真实价值.在JavaScript一切除了truthy "",0,false,NaN,nullundefined(可能有几个我忘了...)

但是,如果其中一个假值是一个你可以接受的值,如零或false?甲quantity的零是完全合法的值,如falseisTotallyLame.所以你需要一个允许这些值通过的测试.你需要测试存在.

if (obj!==null && obj!==undefined)存在的测试.仅测试nullundefined将失败测试.这意味着空字符串"",零0或甚至false是有效值,因为它们是设置值.


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

if (typeof obj !== "undefined" && obj !== null)
Run Code Online (Sandbox Code Playgroud)