- 如果(a)准确检查JavaScript,该怎么办?它可以检查未定义吗?它可以检查null吗?它可以检查一个空字符串吗?
- 我们何时需要使用a =='undefined'的typeof typeof typeof a ='undefined',否则(a)?
if
在布尔上下文中评估 a
,并使用结果来确定要执行的代码分支。 undefined
, null
和空字符串在布尔上下文中均评估为 false
。
typeof a === "undefined"
对于检查名称a
是否定义很有用(例如,当前范围中是否存在该名称的变量)。没有此构造,如果未定义,直接访问a
将会引发异常。
从ecmascript语言规范中获取,if-statement的工作如下:
12.5 if语句
生产ifStatement:if(表达)语句如下评估:
- 让 exprref 是评估表达式的结果。
- 如果 toboolean(getValue(exprRef))是错误的,返回(正常,空,空)。
- 返回评估语句的结果。
是指在这种情况下,它将尝试使用这样的toBoolean
转换:
表11-托布尔人转换
未定义: false
null: false
布尔:结果等于输入参数(无转换)。
数字:结果是 false 如果参数为 0 , -0 或 nan ;否则结果是 true 。
字符串:结果是 false 如果参数为空字符串(其长度为零); 否则结果是 true 。
对象: true
它检查一个不为错误的值,i。e。false
,0
,undefined
和null
或一个空字符串。当您好奇一个值是否不确定时,typeof a == 'undefined'
很有用,因为if (a)
无法区分false-ish值。
条件语句只会检查'true'或'false'。在不确定的情况下,条件不满足,并且控制无法进入循环。
typeof返回操作数的类型。有关详细信息,您可能需要查看此链接
以下值在JavaScript条件下被视为false:false,null,Undefined,'',0,Nan
H2CO3的答案实际上几乎是正确的,您可以在没有类型的情况下检查是否会导致脚本错误。
如果这样做:
<script>
if (a) alert('hello');
</script>
您将获得脚本错误,并且将无法评估IF(在未显示警报的意义上,结果是相同的,但这是因为由于脚本错误,线程执行结束。)
)如果要确保A定义A,则需要使用TypeOf测试。