0
  1. if(a) 准确地检查 javascript 是什么?它可以检查未定义吗?它可以检查null吗?它可以检查一个空字符串吗?
  2. 我们什么时候需要使用 typeof a == 'undefined' 或者它可以被 if(a) 覆盖?
4

6 回答 6

4

if在布尔上下文中计算a并使用结果来确定要执行的代码分支。undefinednull并且空字符串都false在布尔上下文中计算。

typeof a === "undefined"检查名称是否已定义很有用a(例如,当前范围内是否存在具有该名称的变量)。如果没有这个结构,a如果没有定义,直接访问会抛出异常。

于 2012-12-27T08:53:30.550 回答
4

取自ECMAscript 语言规范,if 语句的工作方式如下:

12.5 if 语句

产生式 IfStatement : if ( Expression ) 语句的评估如下:

  1. exprRef为计算表达式的结果。
  2. 如果ToBoolean(GetValue(exprRef))为 false,则返回(正常、空、空)。
  3. 返回 Statement 的评估结果。

意味着,在这种情况下,它会尝试这样的toBoolean转换:

表 11 - ToBoolean 转换

Undefined: false
Null: false
Boolean: 结果等于输入参数(无转换)。Number:如果参数为+0-0NaN
,则 结果为false;否则结果为。String:如果参数为空字符串(长度为零),则 结果为假;否则结果为。 对象:

于 2012-12-27T08:54:17.523 回答
1

它检查不是假的值,即,false和/或空字符串。当您对某个值是否未定义感到好奇时很有用,因为无法区分虚假值。0undefinednulltypeof a == 'undefined'if (a)

于 2012-12-27T08:50:47.973 回答
0

条件语句只会检查“真”或“假”。在未定义的情况下,不满足条件并且控制不会进入循环。

typeof 返回操作数的类型。有关详细信息,您可能希望查看此链接

于 2012-12-27T08:53:38.833 回答
0

以下值在 javascript 条件下被视为 false:false、null、undefined、''、0、NaN

于 2012-12-27T08:55:31.070 回答
0

h2co3 的答案实际上几乎是正确的,你不能在没有 typeof 的 if 中检查未定义的变量,因为这会导致脚本错误。

如果你这样做:

<script>
if (a) alert('hello');
</script>

你会得到一个脚本错误并且 if 不会被评估(在没有显示警报的意义上结果是相同的,但那是因为线程执行由于脚本错误而结束。)

如果你想确保 a 被定义,你需要使用 typeof 测试。

于 2012-12-27T09:03:32.343 回答