【每日一题】面试官问:JS类型判断有哪几种方法?

1,153 阅读5分钟

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

作者:saucxs | songEagle

2020,实「鼠」不易

2021,「牛」转乾坤

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

一、前言

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

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

每日一题

二、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

语法:variable instanceof constructor

如果变量是引用类型,可以使用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、作者昵称:saucxs,songEagle,松宝写代码。「松宝写代码」公众号作者,每日一题,实验室等。一个爱好折腾,致力于全栈,正在努力成长的字节跳动工程师,星辰大海,未来可期。内推字节跳动各个部门各个岗位。

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

松宝写代码

字节内推福利

  • 回复「校招」获取内推码
  • 回复「社招」获取内推
  • 回复「实习生」获取内推

后续会有更多福利

学习资料福利

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

往期「每日一题」

1、JavaScript && ES6

2、浏览器

3、Vue

4、算法

5、Http

6、Node