Pat*_*ney 289 javascript jquery undefined
在jQuery的核心风格指南建议两种不同的方法来检查一个变量是否被定义.
typeof variable === "undefined"variable === undefinedobject.prop === undefined为什么jQuery对全局变量使用一种方法而对本地和属性使用另一种方法?
Lin*_*een 350
对于未声明的变量,typeof foo将返回字符串文字"undefined",而身份检查foo === undefined将触发错误"foo未定义".
对于局部变量(您知道在某处声明),不会发生此类错误,因此进行身份检查.
Tim*_*own 112
我坚持在typeof foo === "undefined"任何地方使用.这永远不会出错.
我想象jQuery推荐两种不同方法的原因是它们undefined在jQuery代码所在的函数中定义了自己的变量,因此在该函数中undefined可以安全地从外部篡改.我还想象某个地方有人对这两种不同的方法进行了基准测试,并发现它foo === undefined更快,因此决定了它的出路.[更新:如评论中所述,比较undefined也略短,这可能是一个考虑因素.] 然而,实际情况下的收益将是微不足道的:这种检查永远不会是任何瓶颈,什么你输了很重要:评估一个主机对象的属性进行比较会抛出一个错误,而一个typeof检查永远不会.
例如,IE中使用以下内容来解析XML:
var x = new ActiveXObject("Microsoft.XMLDOM");
Run Code Online (Sandbox Code Playgroud)
要检查它是否loadXML安全有方法:
typeof x.loadXML === "undefined"; // Returns false
Run Code Online (Sandbox Code Playgroud)
另一方面:
x.loadXML === undefined; // Throws an error
Run Code Online (Sandbox Code Playgroud)
UPDATE
typeof我忘记提到的检查的另一个优点是它也适用于未声明的变量,foo === undefined检查没有,实际上抛出了ReferenceError.感谢@LinusKleen提醒我.例如:
typeof someUndeclaredVariable; // "undefined"
someUndeclaredVariable === undefined; // throws a ReferenceError
Run Code Online (Sandbox Code Playgroud)
底线:始终使用typeof支票.
Jak*_*kob 28
使用typeof-variant的另一个原因是:undefined可以重新定义.
undefined = "foo";
var variable = "foo";
if (variable === undefined)
console.log("eh, what?!");
Run Code Online (Sandbox Code Playgroud)
结果typeof variable 不能.
更新:请注意,在ES5中并非如此.
谁对性能增益感兴趣variable === undefined,可以看看这里,但它似乎只是一个chrome优化.