关于使用typeof bar ===“object” 潜在缺陷讨论

yzjacc 2019-05-13 07:42:50
尽管typeof bar === “object” 是检查bar是否是对象的可靠方法,但JavaScript中令 人惊讶的问题null也被认为是一个对象! 因此,对于大多数开发人员来说,下面的代码会将true ( 而不是false)打印到控制台: var bar = null; consolelog(typeof bar === "object"); // logs true! 只要知道这一点,就可以通过检查bar是否为空来轻松避免该问题: console.logl(bar !== null) && (typeof bar === "bject')); // logs false 为了让我们的答案更加的完整,还有两件事值得注意:首先, 如果bar是一个函数,上 面的解决方案将返回false。在大多数情况下,这是所期望的行为,但是在您希望函数返回true的情况下,您可以将上述解决方案修改为: console.log(bar !== null && ((tpeof bar === "object") II(typeof bar === "function'); 其次,如果bar是数组,则上述解决方案将返回true (例如,如果var bar=D;)。在大多数情况下,这是所希望的行为,因为数组确实是对象,但是在您想要对数组也是false的情况下,可以将上述解决方案修改为: console.log((bar !== null) && (typeof bar === "object") && (to-String.call(bar) !== "[object Ary'"); 但是,还有一个替代方法对空值,数组和函数返回false, 但对于对象则为true: console.log((bar !== null) && (bar constructor === Object));或者,如果您使用jQuery: console.log((bar !== nul) && (typeof bar === "object") && (!$.isArry(ab))); ES5使得数组的情况非常简单,包括它自己的空检查: console.log(Array.isArray(bar));
...全文
75 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

87,993

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧