侧边栏壁纸
  • 累计撰写 225 篇文章
  • 累计创建 275 个标签
  • 累计收到 0 条评论

目 录CONTENT

文章目录

前端面试题(七)

DGF
DGF
2019-07-28 / 0 评论 / 0 点赞 / 20 阅读 / 0 字

使用 typeof bar === "object" 来确定 bar 是否是对象的潜在陷阱是什么?如何避免这个陷阱?

尽管 typeof bar === "object" 是检查 bar 是否对象的可靠方法,令人惊讶的是在 JavaScript 中 null 也被认为是对象!

因此,令大多数开发人员惊讶的是,下面的代码将控制台输出 true

var bar = null;
console.log(typeof bar === "object");  // true

只要清楚这一点,同时检查 bar 是否为 null,就可以很容易地避免问题:

console.log((bar !== null) &&  (typeof bar === "object"));  // false

要答全问题,还有其他两件事情值得注意:

  1. 上述解决方案将返回 false,当 bar 是一个函数的时候。在大多数情况下,这是期望行为,但当你也想对函数返回 true 的话,你可以修改上面的解决方案为:

    console.log((bar !== null) && ((typeof bar === "object") || (typeof bar === "function")));
    
  2. 上述解决方案将返回 true,当 bar 是一个数组(例如,当 var bar = [];)的时候。

    在大多数情况下,这是期望行为,因为数组是真正的对象,但当你也想对数组返回 false 时,你可以修改上面的解决方案为:

    console.log((bar !== null) && (typeof bar === "object") &&  (toString.call(bar) !== "[object Array]"));
    

    或者,如果你使用 jQuery 的话:

    console.log((bar !== null) && (typeof bar === "object") && (! $.isArray(bar)));
    
0

评论区