为了保护我的代码不会访问未声明的变量,我使用
if (typeof myVar != 'undefined')
这样可以正常工作,但我想在其中添加另一个if语句。像转换这个:
if (typeof myVar != 'undefined'){
if (myVar == "test"){}
}
到此:
if (typeof myVar != 'undefined' && myVar == "test")
考虑到myVar
可能未定义,在最后一段代码中,最后一段代码是否安全?每个浏览器?
if ()
中的各种语句是否可能按照它们的写入顺序进行评估?
如果myVar == "test"
未定义,我可以假设myVar
永远不会执行吗?
答案 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)
如果你使用&&
答案 2 :(得分:4)
是的,没关系。
在javascript中,优先级如下:
typeof
> !=/==
> &&
对于a && b
,当b
为假时,a
永远不会被执行。
答案 3 :(得分:1)
if (typeof myVar != 'undefined' && myVar == "test")
表达式从左到右进行评估,如果myVar
为undefined
,则表达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'
这是一个简单的字符串!