判断是否是空对象_【每日一题】面试官问:JS类型判断有哪几种方法?

关注「松宝写代码」,精选好文,每日一题

作者:saucxs | songEagle

2020,实「鼠」不易

2021,「牛」转乾坤

风劲潮涌当扬帆,任重道远须奋蹄!

一、前言

2020.12.23 立的 flag,每日一题,题目类型不限制,涉及到JavaScript,Node,Vue,React,浏览器,http等领域。

本文是「每日一题」第 15 题:【每日一题】面试官问:JS类型判断有哪几种方法?

4761669ca73d14dc44af5f0163406132.png

往期「每日一题」:

1、JavaScript && ES6

  • 第 14 题:【每日一题】面试官问:谈谈你对JS对象的创建和引申

  • 第 13 题[每日一题]面试官问:['1', '2', '3'].map(parseInt)输出,原因,以及延伸?

  • 第 12 题[每日一题]面试官问:JS引擎的执行过程(二)

  • 第 11 题[每日一题]面试官问:JS引擎的执行过程(一)

  • 第 10 题[每日一题]面试官问:详细说一下JS数据类型

  • 第 8 题[每日一题]面试官问:谈谈你对ES6的proxy的理解?

  • 第 7 题[每日一题]面试官问:for in和for of 的区别和原理?

  • 第 6 题[每日一题]面试官问:Async/Await 如何通过同步的方式实现异步?

  • 第 3 道「「每日一题」面试官问你对 Promise 的理解?可能是需要你能手动实现各个特性」

  • 第 2 道「[每日一题]ES6 中为什么要使用 Symbol?」

2、浏览器

  • 第 9 题[每日一题]requestAnimationFrame不香吗?

3、Vue

  • 第 5 道「每日一题」到底该如何回答:vue数据绑定的实现原理?

4、算法

  • 第 4 道「每日一题」与面试官手撕代码:如何科学高效的寻找重复元素?

5、Http

  • 第 1 道「一道面试题是如何引发深层次的灵魂拷问?」

二、JS类型的判断方法

  • 基本数据类型 number string boolean null undefined symbol

  • 引用类型 object function array regExp等

1、typeof

  • 未定义、未初始化:返回 "undefined"

  • 布尔值:返回 "boolean"

  • 字符串:返回 "string"

  • 数值(包括NAN):返回 "number"

  • 对象、null:返回 "object", null 表示空对象指针

  • 函数:返回 "function"

注意typeof可以判断基本类型,无法判断对象的类型或者null

2、instanceof

语法:variableinstanceofconstructor

如果变量是引用类型,可以使用instanceof判断,检测基本类型时,会返回false。

原理:判断变量的原型链上是否有构造函数的prototype属性

如:

// 判断person是否是object类型对象

person instanceof Object

注意:空对象{}的判断问题

let obj1 = {}

console.log(obj1 instanceof Object) // true

let obj2 = Object.create(null)

console.log(obj2 instanceof Object) // false

let obj3 = Object.create({})

console.log(obj3 instanceof Object) // true

3、Object.prototype.toString

所有的数据类型都可以使用此方法进行检测,且非常精准。如:

let obj = {}

Object.prototype.toString.call(obj) === '[object Object]'

三、总结

  • typeof 适合基本类型和function类型的检测,无法判断null与object

  • instanceof 适合自定义对象,也可以用来检测原生对象,在不同的iframe 和 window间检测时失效,还需要注意 Object.create(null)对象的问题

  • {}.toString 适合内置对象和基元类型,遇到null和undefined失效(IE678返回[object Obejct])

各种福利

1、字节内推福利

  • 回复「校招」获取内推码

  • 回复「社招」获取内推

  • 回复「实习生」获取内推

后续会有更多福利

2、学习资料福利

回复「算法」获取算法学习资料

3、往期每日一题

往期「每日一题」:

1、JavaScript && ES6

  • 第 14 题:【每日一题】面试官问:谈谈你对JS对象的创建和引申

  • 第 13 题[每日一题]面试官问:['1', '2', '3'].map(parseInt)输出,原因,以及延伸?

  • 第 12 题[每日一题]面试官问:JS引擎的执行过程(二)

  • 第 11 题[每日一题]面试官问:JS引擎的执行过程(一)

  • 第 10 题[每日一题]面试官问:详细说一下JS数据类型

  • 第 8 题[每日一题]面试官问:谈谈你对ES6的proxy的理解?

  • 第 7 题[每日一题]面试官问:for in和for of 的区别和原理?

  • 第 6 题[每日一题]面试官问:Async/Await 如何通过同步的方式实现异步?

  • 第 3 道「「每日一题」面试官问你对 Promise 的理解?可能是需要你能手动实现各个特性」

  • 第 2 道「[每日一题]ES6 中为什么要使用 Symbol?」

2、浏览器

  • 第 9 题[每日一题]requestAnimationFrame不香吗?

3、Vue

  • 第 5 道「每日一题」到底该如何回答:vue数据绑定的实现原理?

4、算法

  • 第 4 道「每日一题」与面试官手撕代码:如何科学高效的寻找重复元素?

5、Http

  • 第 1 道「一道面试题是如何引发深层次的灵魂拷问?」

谢谢支持

21431f56f42ce063ad99bc7b0126fc95.gif

1、喜欢的话可以「分享,点赞,在看」三连哦。

2、作者昵称:saucxs,songEagle,松宝写代码。「松宝写代码」公众号作者,每日一题,实验室等。一个爱好折腾,致力于全栈,正在努力成长的字节跳动工程师,星辰大海,未来可期。内推字节跳动各个部门各个岗位。

3、长按下面图片,关注「松宝写代码」,是获取开发知识体系构建,精选文章,项目实战,实验室,每日一道面试题,进阶学习,思考职业发展,涉及到JavaScript,Node,Vue,React,浏览器,http等领域,希望可以帮助到你,我们一起成长~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值