javascript中无表达式语句的完整形式是什么?

时间:2014-02-22 14:55:14

标签: javascript

Javascript采用了一种语法,您可以在其中执行逻辑检查,而无需检查任何内容:

if (foo) { 
}

这相当于什么?是吗:

if (foo != null) { }
if (foo !== null) { }
if (typeof(foo) != 'undefined') { }
if (typeof(foo) !== 'undefined') { }
if (typeof(foo) != 'object') { }
if (typeof(foo) !== 'Object') { }

我的实际动机是要确保成员“存在”(也就是说,如果它是nullundefined那么它就不会存在):

if (window.devicePixelRatio !== null)
if (window.devicePixelRatio != null)
if (!(window.devicePixelRatio == null))
if (!(window.devicePixelRatio === null))
if (!(window.devicePixelRatio == undefined))
if (!(window.devicePixelRatio === undefined))
if ((window.devicePixelRatio !== undefined))

我担心的是,如果成员已定义,但定义为null,在这种情况下(据我所知),它未被分配。

我知道无表达式语法会为“truthy”值返回true。我对“truthy”值不太感兴趣,作为实际值。

1 个答案:

答案 0 :(得分:6)

if (foo) { 
}
     

“这相当于什么?”

它不等同于您建议的任何一个。它等同于:

if (Boolean(foo)) { }
使用!运算符

或相同的事情:

if (!!foo) { }

或者如果你真的想要,你可以在比较中明确。

if (!!foo === true) { }

  

“我的实际动机是要确保成员”存在“......”

要查找对象中是否存在成员,请使用in运算符。

if ("devicePixelRatio" in window) { }

  

“...(也就是说,如果它为null或未定义,则它不存在):”

要检查不是nullundefined,这与不存在相同,请执行以下操作:

if (window.devicePixelRatio != null) { }

!=运算符会同时执行nullundefined检查。任何其他值都符合条件。