Javascript中if语句中的评估顺序

Sat*_*nix 13 javascript

为了保护我的代码不被访问我使用的未声明的变量

if (typeof myVar != 'undefined')
Run Code Online (Sandbox Code Playgroud)

这工作正常,但我想在其中粘贴另一个if语句.像转换这个:

if (typeof myVar != 'undefined'){
    if (myVar == "test"){}
}
Run Code Online (Sandbox Code Playgroud)

对此:

if (typeof myVar != 'undefined' && myVar == "test")
Run Code Online (Sandbox Code Playgroud)

考虑myVar可能是未定义的,这个最后的代码在每种使用情况和每个浏览器中都是安全的吗?

内部的各种语句是否可能if ()不按照它们编写的顺序进行评估?

我可以假设myVar == "test"永远如果被执行myVar未定义?

Jam*_*ice 10

myVar == "test"如果myVar未定义,我可以假设永远不会被执行吗?

是.您正在测试的表达式是一个逻辑AND表达式,并指定了两个操作数的求值顺序:

生产LogicalANDExpression : LogicalANDExpression && BitwiseORExpression的评估如下(强调添加):

  • lref成为评估LogicalANDExpression的结果.
  • lval为GetValue(lref).
  • 如果ToBoolean(lval)为false,则返回lval.
  • rref是评估BitwiseORExpression的结果.
  • 返回GetValue(rref).

这基本上说是评估第一个操作数,如果评估的结果是false,则整个表达式是false,并且永远不会计算第二个操作数.


xda*_*azz 6

是的,没关系。

在javascript中,优先级如下:

typeof> !=/==>&&

对于a && b,b永远不会在a为 false时执行。


But*_*jay 5

是的,如果您使用&&运算符,那么如果第一个条件为假,则第二个将永远不会测试。