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

What is the full form of an expressionless statement in javascript?

本问题已经有最佳答案,请猛点这里访问。

Javascript采用了C语言中的一种语法,您可以在不检查任何内容的情况下执行逻辑检查:

1
2
if (foo) {
}

这等同于什么?它是:

1
2
3
4
5
6
if (foo != null) { }
if (foo !== null) { }
if (typeof(foo) != 'undefined') { }
if (typeof(foo) !== 'undefined') { }
if (typeof(foo) != 'object') { }
if (typeof(foo) !== 'Object') { }

我提出请求的实际动机是想确保成员"存在"(也就是说,如果是nullundefined那么它不存在):

1
2
3
4
5
6
7
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。我对"真实的"价值不感兴趣,因为它是一个实际的价值。


1
2
if (foo) {
}

"What is this equivalent to?"

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

1
if (Boolean(foo)) { }

或者使用!操作符执行相同的操作:

1
if (!!foo) { }

或者如果你真的想要的话,你可以在你的比较中表现得很明确。

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

"My actual motivation for asking is wanting to ensure that a member"exists"..."

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

1
if ("devicePixelRatio" in window) { }

"... (that is to say, if it is null or undefined then it doesn't exist):"

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

1
if (window.devicePixelRatio != null) { }

!=操作员将同时执行nullundefined检查。任何其他值都将满足条件。