在javascript中,哪一个更好?`var Obj=Obj | |{}`还是`if(Obj==&';未定义的';|类型的Obj!==';对象';)`

在javascript中,哪一个更好?`var Obj=Obj | |{}`还是`if(Obj==&';未定义的';|类型的Obj!==';对象';)`,javascript,Javascript,我想知道以下哪种方法更好: var Obj = Obj || {}; 或 有人告诉我第二种方法更好,但我不知道为什么。请你给我解释一下每种方法的优缺点 非常感谢第二种方法更为具体,因此为了创建对象(如果对象还不存在),它会更好。第一种方法仅测试对象是否为“truthy”,这意味着如果Obj是数字5,它仍将返回原始的Obj,而在第二种方法中,Obj必须为“object”类型才能保留其值 实际上,这没有多大区别,因为你很少遇到上述情况;第二种方法只是更具体地告诉读者你想要什么。我喜欢第一种方法,因

我想知道以下哪种方法更好:

var Obj = Obj || {};

有人告诉我第二种方法更好,但我不知道为什么。请你给我解释一下每种方法的优缺点


非常感谢

第二种方法更为具体,因此为了创建对象(如果对象还不存在),它会更好。第一种方法仅测试对象是否为“truthy”,这意味着如果
Obj
是数字5,它仍将返回原始的
Obj
,而在第二种方法中,
Obj
必须为“object”类型才能保留其值


实际上,这没有多大区别,因为你很少遇到上述情况;第二种方法只是更具体地告诉读者你想要什么。我喜欢第一种方法,因为它比较短,但这取决于你想要的具体程度。

我看到的第一种方法的唯一问题是,如果有人定义了
Obj
来指代不是对象但也不是错误的东西,比如说一个非零整数,那么
Obj
将继续指向那个东西,随后调用假定它是对象的
Obj
,将失败。但为了简单起见,我还是更喜欢第一个版本;我尝试以这样一种方式命名这样的对象,即没有人会为该名称分配任何不合适的内容。

这些代码不会做同样的事情。。。另外,我认为你不是想写
Obj==='undefined'
,而是
Obj==='undefined'
typeof Obj=='undefined'
@AlinPurcaru:甚至
Obj=='undefined'
typeof Obj=='undefined'
都没有意义,因为第二个条件无论如何都会抓住它。在我看来,第二件事的作者似乎没有考虑代码。@thejh:是的,我考虑了代码,这就是为什么我要问一个问题。我以前用过第一种方法,但有人告诉我这是个坏主意。。。他告诉我用第二种方法代替。你的第二种方法是多余的,因为
typeof undefined
是“undefined”,当然,它不等于“object”。
if (Obj === undefined || typeof Obj !== 'object') {
  Obj = {};
}