面试官:怎么准确判断JS的数据类型?

简介: 面试官:怎么准确判断JS的数据类型?

640.jpg

1、typeof

检测方法:

1、console.log(typeof 1) // number
2、console.log(typeof 'str') // string
3、console.log(typeof true) // boolean
4、console.log(typeof undefined) // undefined
5、console.log(typeof {}) // object
6、console.log(typeof []) // object
7、console.log(typeof null) // object
8、console.log(typeof function() {}) // object
9、console.log(type typeof new RegExp()) // object

结论:

  • 1、typeof 只能准确的检测数一些基本类型
  • 2、正则、null、对象、数组检测出来的都是是对象,并不是十分准确

2、instanceof

instanceof 方法用来检测 某函数/某类是否为某实例对象构造器

检测方法:

console.log({} instanceof Object) // true
console.log([] instanceof Array) // true
console.log(new Date() instanceof Date) // true
console.log(1 instanceof Number) // false
console.log('str' instanceof String) // false
console.log(null instanceof Object) // false

结论:

  • 1、instanceof可以判断这个变量是否为某个函数的实例,而typeof不能
  • 2、instanceof只能通过true或者false来判断,不能直接看出来是什么类型
  • 3、基本类型的判断是错误的

3、constructor构造函数

检测方法:

function Father(){}
function Sun(){}
Sun.prototype = new Father();
Sun.prototype.constructor = Sun;
let sun = new Sun();
sun.constructor === Sun    // true
sun.constructor === Sun  // false
sun.constructor === Object 

结论:1、constructor容易被修改

4、终极大法 Object.portotype.toString.call()

获取Object.portotype上的toString方法,让方法的this变为需要检测的数据类型值

检测方法:

 Object.prototype.toString.call(true) //[object Boolean]
 Object.prototype.toString.call(1) //"[object Number]"
 Object.prototype.toString.call('str') //"[object String]"
 Object.prototype.toString.call({}) //"[object Object]"
 Object.prototype.toString.call(function () {}) //"[object Function]"
 Object.prototype.toString.call(Undefined) //"[object Undefined]"
 Object.prototype.toString.call(Null) //"[object Null]"
 Object.prototype.toString.call(new RegExp()) //"[object RegExp]"
  等等

总结:

  • 1、基本上所有类型都可以判断
  • 2、Object.prototype.toString执行的时候返回当前方法中的this的所属类信息
  • 3、不能精准判断自定义对象,对于自定义对象只会返回[object Object],但是instanceof 可以弥补这个缺点

总结不到位的,希望各位大大多多交流指正~~

往期

面试官:浅拷贝和深拷贝的区别?怎么实现一个深拷贝?

面试官:能写一个new 操作符吗?

面试官:你会手写bind apply 和bind吗?

面试官:JS判断对象为空有几种方法?

面试官:判断数组的方式有哪些

相关文章
|
7天前
|
JavaScript 前端开发
每天一道面试题——JavaScript的this指向【一】
每天一道面试题——JavaScript的this指向【一】
20 0
|
7天前
|
JavaScript 前端开发
js确定数据类型typeof与instanceof
js确定数据类型typeof与instanceof
13 0
|
7天前
|
JavaScript
js基础数据类型
js基础数据类型
16 1
|
14天前
|
JavaScript 前端开发
常见的JS面试题
【8月更文挑战第5天】 常见的JS面试题
39 3
|
4天前
|
JavaScript 前端开发
JavaScript基础&实战(1)js的基本语法、标识符、数据类型
这篇文章是JavaScript基础与实战教程的第一部分,涵盖了JavaScript的基本语法、标识符、数据类型以及如何进行强制类型转换,通过代码示例介绍了JS的输出语句、编写位置和数据类型转换方法。
JavaScript基础&实战(1)js的基本语法、标识符、数据类型
|
4天前
|
JavaScript
js基础数据类型
js基础数据类型
|
16天前
|
存储 JavaScript 前端开发
JavaScript引用数据类型和构造函数的秘密
JavaScript引用数据类型和构造函数的秘密
|
16天前
|
JavaScript 前端开发 程序员
JS小白请看!一招让你的面试成功率大大提高——规范代码
JS小白请看!一招让你的面试成功率大大提高——规范代码
|
16天前
|
JavaScript 前端开发 UED
小白请看! 大厂面试题 :如何用JS实现瀑布流
小白请看! 大厂面试题 :如何用JS实现瀑布流
|
4天前
|
JavaScript 前端开发
JavaScript 数据类型
JavaScript 数据类型
11 0