答案 0 :(得分:4)
if
在布尔上下文中计算a
,并使用结果来确定要执行的代码分支。 undefined
,null
和空字符串都在布尔上下文中计算为false
。
typeof a === "undefined"
可用于检查名称a
是否已定义(例如,当前作用域中是否存在具有该名称的变量)。如果没有这个结构,直接访问a
会抛出异常(如果没有定义)。
答案 1 :(得分:4)
取自ECMAscript language specification,if-Statement的工作原理如下:
12.5 if语句
生产IfStatement:if(Expression)Statement的计算方法如下:
- 让 exprRef 成为评估Expression的结果。
- 如果 ToBoolean(GetValue(exprRef))为false,则返回(正常,空,空)。
- 返回评估Statement的结果。
醇>
意味着,在这种情况下,它会尝试进行toBoolean
转换,其行为如下:
表11 - ToBoolean Conversions
未定义: false
空:错误
Boolean:结果等于输入参数(无转换) 数字:如果参数为 +0 , -0 或 NaN ,则结果为 false ;否则结果是 true String:如果参数为空String(其长度为零),则结果为 false ; 否则结果是 true 对象: true
答案 2 :(得分:1)
它检查的值不是false-ish,i。即false
,0
,undefined
和null
或空字符串。如果您对未定义的值感到好奇,typeof a == 'undefined'
非常有用,因为if (a)
无法区分false-ish值。
答案 3 :(得分:0)
条件语句只会检查'true'或'false'。 如果未定义,则不满足条件,控制不会进入循环。
typeof返回操作数的类型。有关详细信息,您可能需要查看this link
答案 4 :(得分:0)
在javascript条件中,以下值被视为false:false,null,undefined,'',0,NaN
答案 5 :(得分:0)
h2co3的答案实际上几乎是正确的,你可以不检查if if without typeof中的未定义变量,因为这会导致脚本错误。
如果你这样做:
<script>
if (a) alert('hello');
</script>
您将收到脚本错误,并且不会评估if(结果与警报未显示的意义相同,但这是因为脚本错误导致线程执行结束。)
如果你想确定定义a,你需要使用typeof测试。