可能重复:
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的问题中标记代码?
答案 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
)那么该语句将是假的。