如果(a)准确检查javascript,该怎么办?

时间:2012-12-27 08:47:38

标签: javascript conditional-statements

  1. 如果(a)准确检查javascript怎么办?可以检查undefined吗?可以检查null吗?可以检查空字符串吗?
  2. 我们什么时候需要使用typeof a =='undefined',或者它可以被if(a)覆盖?

6 个答案:

答案 0 :(得分:4)

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

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

答案 1 :(得分:4)

取自ECMAscript language specification,if-Statement的工作原理如下:

  

12.5 if语句

     

生产IfStatement:if(Expression)Statement的计算方法如下:

     
    
        
  1. exprRef 成为评估Expression的结果。
  2.     
  3. 如果 ToBoolean(GetValue(exprRef))为false,则返回(正常,空,空)。
  4.     
  5. 返回评估Statement的结果。
  6.        

意味着,在这种情况下,它会尝试进行toBoolean转换,其行为如下:

  

表11 - ToBoolean Conversions

     

未定义: false
  空:错误
  Boolean:结果等于输入参数(无转换)   数字:如果参数为 +0 -0 NaN ,则结果为 false ;否则结果是 true   String:如果参数为空String(其长度为零),则结果为 false ;   否则结果是 true   对象: true

答案 2 :(得分:1)

它检查的值不是false-ish,i。即false0undefinednull或空字符串。如果您对未定义的值感到好奇,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测试。