检查JavaScript中的变量是否未定义时的常规做法如下:
var isUndefined=(typeof variableName==="undefined");
我最近遇到过使用两个感叹号来确定相同的逻辑:
var isUndefined=!!variableName;
答案 0 :(得分:7)
交替使用这些方法是否安全?
没有。下面的详细信息,但即使您从第二个示例中删除其中一个!
,它们也无法互换(其中两个,true
为undefined
,这是&n #39; t你想要从你所指定的变量名称中得到的东西。但这不是唯一的问题。
两者在浏览器中是否兼容?
是。它们中的每一个都可以跨浏但请参见上文:他们可靠不做同样的事情。
是否有任何理由不应该使用" !!"方法
是的,!
(同样,不是!!
)为0
,NaN
,null
提供相同的结果, ""
和false
与undefined
一样。
详细说明:
当你这样做时
var isUndefined = typeof variableName==="undefined";
(()
是不必要的),您正在对undefined
进行非常具体的测试。 true
只有undefined
。
相反,当你这样做时
var isUndefined = !variableName;
您未对undefined
进行测试,您正在测试任何虚假值。假名值是我之前列出的值(0
,NaN
,null
,""
,false
和undefined
)。对于其中任何一个,结果都是true
。
现在,如果您希望(例如)获得非null
对象引用或undefined
,那么!
测试就可以了。但是,如果您确实需要知道某些内容是undefined
,具体而言,您需要进行typeof
测试。
此外,正如Felix Kling在问题评论中指出的那样,!
测试将抛出ReferenceError
如果变量根本没有定义(相对于被定义但具有值undefined
),因为它试图读取变量的值。如果您不确定该变量是否存在,则typeof
测试是安全的,因为它不会尝试读取其值。