Javascript 确定一个对象';有效性

Javascript 确定一个对象';有效性,javascript,Javascript,上下文: 我试图确保传递给函数的对象在使用之前是有效的。我想知道这两种方法之间是否有区别,一种在语法上比另一种更冗长。如果Chrome、IE、FF等现代用户代理使用的所有JavaScript引擎的功能和行为都相同,我宁愿使用更简单的版本。如果不是,我希望使用安全的赌注,这样无论JavaScript引擎的实现如何,我的代码都能按预期运行 问题: 给定以下函数,有两条语句由注释部分表示。 不管JS引擎(或用户代理)如何,语句1是否产生与语句2相同的结果?为什么呢 function f(obj) {

上下文

我试图确保传递给函数的对象在使用之前是有效的。我想知道这两种方法之间是否有区别,一种在语法上比另一种更冗长。如果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');
   }
}

不,它们是不同的

if(obj)
测试真实值。在JavaScript中,除了
0
false
NaN
null
undefined
(可能还有一些我忘记了…)

但是,如果其中一个falsy值是您可以接受的值,例如零或
false
?零的
数量
是一个完全合法的值,对于
isTotallyLame
,也是
false
。因此,您需要一个允许这些值通过的测试。你需要测试你的存在

if(obj!==null&&obj!==undefined)
测试是否存在。只有
null
undefined
会使测试失败。这意味着空字符串
、零
0
、甚至
false
都是有效值,因为它们是设置值


然而,正如@Tim所指出的,生存的首选标准测试如下:

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

我更喜欢对象的类型“未定义”&&obj!==空我认为你的第一个几乎一样好,而你的第二个完全相同,但如果你将它与不存在伟大答案和注释的数组索引一起使用,我的不会给出错误,这正是我需要知道的。谢谢大家!