检查未定义变量的最佳JS实践是什么?

时间:2011-08-25 04:20:04

标签: javascript undefined

  

可能重复:
  Javascript: undefined !== undefined?
  What is the best way to compare a value against 'undefined'?

我在控制台上玩过,在检查未定义时得到了一些奇怪的结果,
当我var a; a的类型和值变为"undefined"时? 那么为什么a===undefined为真,a=="undefined"a==="undefined"为假? 并且typeof a == "undefined"会像其他语言一样成为最好的做法吗?

无关 - 如何在iPhone的问题中标记代码?

4 个答案:

答案 0 :(得分:2)

===表示比较Javascript中的类型和值。所以

0 == '0' // true, because it is essentially toStringing both values
0 === '0' // false, because one is a Number and one is a String

检查==“undefined”时,您会看到a是否等于字符串值“undefined”。 Javascript中没有引号的undefined是未定义的值。 a === undefined将a与未定义的值进行比较,a === "undefined"将a与字符串“undefined”进行比较。

使用a === undefined是检查定义的好方法

编辑:这个答案有一些缺陷,我留给评论者纠正我

答案 1 :(得分:2)

当执行==“undefined”或a ===“undefined”时,你将a的值与包含字符u,n,d,e,f,i,n,e的字符串进行比较, d。

所以你的表达式归结为undefined ==“somestring”,这显然是假的。

typeof返回一个字符串,因此在这种情况下将它与字符串进行比较。

答案 2 :(得分:2)

我认为最好的方法是执行严格的等式检查,如= = undefined而typeof a =='undefined'是矫枉过正的,因为没有(至少我知道)情况会导致评估== = undefined为false而a实际上具有未定义的值。

我认为字符串的比较和从变量中获取typeof要比严格的等式(可能需要速度测试)慢得多。

考虑情境表达式本身是检查未定义值的合适方法,除非您需要处理变量的假值。

答案 3 :(得分:1)

仅提及一点:“未定义”一词在javascript中并不特殊。没有关键字或全局代表它。

所以,当你执行a === undefined时,它返回true,因为两个名称都没有分配给它的任何值 - 如果你以前创建了某个地方并分配了一个具有该名称的变量(如undefined = 1)那么该语句将是假的。