Javascript var something=something | |{}有什么陷阱吗

Javascript var something=something | |{}有什么陷阱吗,javascript,syntax,Javascript,Syntax,我偶然发现海报上说 if(typeof MyNamespace === 'undefined'){ var MyNamespace = {}; } 是 经验丰富的程序员会推荐后者来简化代码,还是会让事情变得过于复杂,比如在复杂的复合语句中滥用++或-- 编辑我问这个问题的原因是b/c a,当时有人启发我指出,很多认为自己是专业程序员的人都会犯很多初学者的错误。当时的情况是 if (isReady){ //Do Something } 他说的是一个条件应该意味着什么,isRead

我偶然发现海报上说

if(typeof MyNamespace === 'undefined'){
    var MyNamespace = {};
}

经验丰富的程序员会推荐后者来简化代码,还是会让事情变得过于复杂,比如在复杂的复合语句中滥用
++
--


编辑我问这个问题的原因是b/c a,当时有人启发我指出,很多认为自己是专业程序员的人都会犯很多初学者的错误。当时的情况是

if (isReady){
  //Do Something
}
他说的是一个条件应该意味着什么,
isReady
并不“意味着”什么,相反,我们应该使用

if (isReady === true){
  //Do Something
}

var MyNamespace=MyNamespace | |{}

很好。这真是一种风格选择。我更喜欢
|


通常,
MyNamespace
会抛出一个引用错误,因为它不存在,但它在
var
语句中工作。

从风格上讲,如果您定义的是一个名称空间对象,它是安全的,但是在更广泛地使用它之前要小心

它不仅会在值未定义时覆盖该值,而且在值为
false
0
NaN
null
时也会覆盖该值


在一些有缺陷的旧浏览器中,它会重击旧的变量声明,而不管它是否为真值(如果该变量声明位于不同的
元素中)。很抱歉,我记不清是哪一个了。

那我就远离它,我不喜欢使用太多的这些快捷方式。@puk,在JavaScript中,快捷方式通常意味着发送更少的代码,这是一件好事,其他方面都是一样的。如果您和您的维护人员可能在几个月后就能理解代码,那么我会说去做吧。你可以做个实验。从现在起一个月内,在你的日历上记下一个条目,上面写着“如果你知道()的意思,从现在开始就可以随意使用它”,这样它就会在你忘记这次讨论后弹出。我强烈反对
If(isReady==true)
If(isReady)
更可取。后者较短,可读性更强,其含义也非常清楚。只有当
isReady
不是布尔值且作者不知道在这种情况下发生的类型强制时,才可能出现问题。@TimDown我不应该使用
isReady
,问题是检查是否定义了属性/参数。争论的焦点是,它可能被定义为
false
,这将使条件失败,并且2个月后将导致调试噩梦
if (isReady === true){
  //Do Something
}