如果(a)完全检查JavaScript,该怎么办?


  1. 如果(a)准确检查JavaScript,该怎么办?它可以检查未定义吗?它可以检查null吗?它可以检查一个空字符串吗?
  2. 我们何时需要使用a =='undefined'的typeof typeof typeof a ='undefined',否则(a)?

if在布尔上下文中评估 a,并使用结果来确定要执行的代码分支。 undefinednull和空字符串在布尔上下文中均评估为 false

typeof a === "undefined"对于检查名称a是否定义很有用(例如,当前范围中是否存在该名称的变量)。没有此构造,如果未定义,直接访问a将会引发异常。

从ecmascript语言规范中获取,if-statement的工作如下:

12.5 if语句

生产ifStatement:if(表达)语句如下评估:

  1. exprref 是评估表达式的结果。
  2. 如果 toboolean(getValue(exprRef))是错误的,返回(正常,空,空)。
  3. 返回评估语句的结果。

是指在这种情况下,它将尝试使用这样的toBoolean转换:

表11-托布尔人转换

未定义: false
null: false
布尔:结果等于输入参数(无转换)。
数字:结果是 false 如果参数为 0 -0 nan ;否则结果是 true
字符串:结果是 false 如果参数为空字符串(其长度为零); 否则结果是 true
对象: true

它检查一个不为错误的值,i。e。false0undefinednull或一个空字符串。当您好奇一个值是否不确定时,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测试。

最新更新