我一直不明白这两种测试对象是否存在的方法的区别...
typeof obj == "undefined"
对比
obj == undefined
是首选吗?我几乎总是使用 jQuery,第二个是 jQuery 独有的功能吗?
最佳答案
问题
obj === undefined
如果 'obj'
标识符名称在(词法)环境(或任何外部环境)中不存在,将抛出错误(这反过来会破坏你的程序)。
顺便说一句,通过声明变量 (var x;
) 或将属性分配给 window
对象 (window.x = ...;
).
另一方面
typeof obj === 'undefined'
不会抛出(错误),因此是首选方法。
请注意,您无法在 JavaScript 中检查对象是否存在。 JavaScript 代码不直接处理对象,而是通过引用。如果给定的引用不指向对象并不意味着该对象不存在(它可能被不同的引用引用)。您可以做的是检查引用(如 obj
在您的情况下)是否指向对象值(或者首先是否存在这样的标识符名称)。
如果
typeof obj === 'undefined'
评估为 true
,这可能意味着:
- 名称
'obj'
不存在于词法环境或任何外部环境中, - 名称
'obj'
存在于词法环境链中(位于其中的某处),并且绑定(bind)到undefined
值。
关于javascript - 在javascript中测试未定义的方法的差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8012653/