Pau*_*aul 4 javascript boolean typeof undefined
检查JavaScript中的变量是否未定义时的常见做法如下:
var isUndefined=(typeof variableName==="undefined");
Run Code Online (Sandbox Code Playgroud)
我最近遇到使用两个感叹号来确定相同的逻辑:
var isUndefined=!!variableName;
Run Code Online (Sandbox Code Playgroud)
交替使用这些方法是否安全?
不.下面详细说明,但是即使你!从第二个例子中删除了其中一个,它们也是不可互换的(其中两个,它将是truefor undefined,这不是你想要的变量你想要的名字')重新分配).但这不是唯一的问题.
两者在浏览器中是否兼容?
是.它们中的每一个都可以跨浏 但是见上文:他们可靠地不做同样的事情.
是否有人不应该使用"!!" 方法?
是的,! (同样,没有!!)给出了相同的结果为0,NaN,null,"",和false因为它为undefined.
细节:
当你这样做
var isUndefined = typeof variableName==="undefined";
Run Code Online (Sandbox Code Playgroud)
(这()是不必要的),你正在做一个非常具体的测试undefined.它只会true用于undefined.
相比之下,当你这样做
var isUndefined = !variableName;
Run Code Online (Sandbox Code Playgroud)
你没有测试undefined,你正在测试任何虚假的价值.该falsey值是我在前面列出的那些(0,NaN,null,"",false,和undefined).结果将是true他们中的任何一个.
现在,如果你希望(例如)得到一个非null对象的引用或者undefined,该!测试只是罚款.但是,如果你真的需要知道某些东西undefined,特别是你想要typeof测试.
另外,正如Felix Kling在对问题的评论中指出的那样,如果变量根本没有定义(而不是被定义但是具有值),!测试将抛出一个,因为它试图读取变量的值.的,如果你不知道的变量是否存在可言,因为它不尝试读取其值试验是安全的.ReferenceErrorundefinedtypeof