面试官:怎么准确判断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判断对象为空有几种方法?

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

相关文章
|
3月前
|
存储 JavaScript 对象存储
js检测数据类型有那些方法
js检测数据类型有那些方法
145 59
|
4月前
|
Java
【Java基础面试四】、介绍一下Java的数据类型
这篇文章介绍了Java的数据类型,包括8种基本数据类型(整数、浮点、字符、布尔)和3类引用数据类型(数组、类、接口),并提供了基本数据类型所占内存空间和数据范围的详细信息。
|
12天前
|
存储 JavaScript 前端开发
JavaScript中的数据类型以及存储上的差别
通过本文的介绍,希望您能够深入理解JavaScript中的数据类型及其存储差别,并在实际编程中灵活运用这些知识,以提高代码的性能和稳定性。
41 3
|
1月前
|
JSON JavaScript 前端开发
[JS]面试官:你的简历上写着熟悉jsonp,那你说说它的底层逻辑是怎样的?
本文介绍了JSONP的工作原理及其在解决跨域请求中的应用。首先解释了同源策略的概念,然后通过多个示例详细阐述了JSONP如何通过动态解释服务端返回的JavaScript脚本来实现跨域数据交互。文章还探讨了使用jQuery的`$.ajax`方法封装JSONP请求的方式,并提供了具体的代码示例。最后,通过一个更复杂的示例展示了如何处理JSON格式的响应数据。
40 2
[JS]面试官:你的简历上写着熟悉jsonp,那你说说它的底层逻辑是怎样的?
|
1月前
|
存储 JavaScript 前端开发
js中的数据类型
JavaScript 中的数据类型包括五种基本类型(String、Number、Undefined、Boolean、Null)和三种引用类型(Object、Array、Function,以及ES6新增的Symbol)。基本类型直接存储值,引用类型存储的是指向实际数据的内存地址。了解它们的区别对于掌握 JavaScript 的变量赋值和函数传参至关重要。
24 1
|
1月前
|
存储 缓存 Java
大厂面试必看!Java基本数据类型和包装类的那些坑
本文介绍了Java中的基本数据类型和包装类,包括整数类型、浮点数类型、字符类型和布尔类型。详细讲解了每种类型的特性和应用场景,并探讨了包装类的引入原因、装箱与拆箱机制以及缓存机制。最后总结了面试中常见的相关考点,帮助读者更好地理解和应对面试中的问题。
72 4
|
2月前
|
存储 JavaScript 前端开发
JavaScript 数据类型详解:基本类型与引用类型的区别及其检测方法
JavaScript 数据类型分为基本数据类型和引用数据类型。基本数据类型(如 string、number 等)具有不可变性,按值访问,存储在栈内存中。引用数据类型(如 Object、Array 等)存储在堆内存中,按引用访问,值是可变的。本文深入探讨了这两种数据类型的特性、存储方式、以及检测数据类型的两种常用方法——typeof 和 instanceof,帮助开发者更好地理解 JavaScript 内存模型和类型检测机制。
116 0
JavaScript 数据类型详解:基本类型与引用类型的区别及其检测方法
|
2月前
|
JavaScript 前端开发 开发者
【干货拿走】JavaScript中最全的数据类型判断方法!!!!
【干货拿走】JavaScript中最全的数据类型判断方法!!!!
29 1
|
2月前
|
存储 JavaScript 前端开发
JavaScript数据类型全解:编写通用函数,精准判断各种数据类型
JavaScript数据类型全解:编写通用函数,精准判断各种数据类型
53 0
|
2月前
|
Web App开发 JavaScript 前端开发
前端Node.js面试题
前端Node.js面试题