【问题标题】:What is the full form of an expressionless statement in javascript? [duplicate]javascript中无表达式语句的完整形式是什么? [复制]
【发布时间】:2014-03-24 05:40:30
【问题描述】:

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

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" 值不太感兴趣。

【问题讨论】:

  • 请注意,如果 foo 已定义且等于 0,则它也会返回 false。
  • @Cristy 在这种情况下它是一个有效值:)
  • @IanBoyd,它是有效的,但 if 没有被执行。 var foo = 0; if(foo) console.log(1) 不会输出任何内容,因此它不等同于其中任何一个。

标签: javascript


【解决方案1】:
if (foo) { 
}

“这相当于什么?”

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

if (Boolean(foo)) { }

或使用! 运算符来做同样的事情:

if (!!foo) { }

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

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

“我询问的实际动机是想确保一个成员“存在”......”

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

if ("devicePixelRatio" in window) { }

"...(也就是说如果为null或者undefined则不存在):"

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

if (window.devicePixelRatio != null) { }

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

【讨论】:

  • 我们刚刚被告知!= should not be used叹息
  • @IanBoyd:是的,就像任何功能一样,人们应该了解它的工作原理并在适当的时候使用它。 ==!= 的语义可能有点混乱,但这是一个非常简单和有用的特殊情况。除了nullundefined 之外,什么都不是== null== undefined。您可以配置 jsHint 以关闭该警告。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-06-21
  • 2018-07-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多