Javascript中if语句中的评估顺序

时间:2013-08-29 09:59:50

标签: javascript

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

if (typeof myVar != 'undefined')

这样可以正常工作,但我想在其中添加另一个if语句。像转换这个:

if (typeof myVar != 'undefined'){
    if (myVar == "test"){}
}

到此:

if (typeof myVar != 'undefined' && myVar == "test")

考虑到myVar可能未定义,在最后一段代码中,最后一段代码是否安全?每个浏览器

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

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

6 个答案:

答案 0 :(得分:10)

  

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

是。您正在测试的表达式是logical AND expression,并且指定了两个操作数的评估顺序:

  

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

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

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

答案 1 :(得分:4)

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

答案 2 :(得分:4)

是的,没关系。

在javascript中,优先级如下:

typeof> !=/==> &&

对于a && b,当b为假时,a永远不会被执行。

答案 3 :(得分:1)

if (typeof myVar != 'undefined' && myVar == "test")

表达式从左到右进行评估,如果myVarundefined,则表达short circuit(myVar不会与&#34进行比较;测试")

答案 4 :(得分:1)

每当你使用&&运算符,您传入的条件将按照传入的顺序进行评估。

在你的情况下:

if (typef myVar != 'undefined' && myVar == 'test')

当程序输入此if语句时,它首先检查变量类型是否未定义,如果返回true,则继续第二个参数并检查myVar是否具有值'test'。即使myVar =='test',if语句也会计算false&&的值。 true,返回true。只有当两个条件都返回true时,才会执行代码块,因为表达式将被计算为true(true&& true)。

如果是第一个条件

typeof myVar != 'undefined'

返回false,第二个条件永远不会被评估。

答案 5 :(得分:-1)

非常重要! 使用

if (myVar !== undefined)

这意味着如果之前有任何作业,myVar将无法通过。

并且不要使用'undefined'这是一个简单的字符串!

祝你好运!