判断数据类型的几种方式

390 阅读1分钟
  1. typeof
<!--简单数据类型-->

const str = 'abc'
console.log(typeof str)  // string
const num = 123
console.log(typeof num) // number
console.log(typeof true) // boolean
console.log(typeof undefined) // undefined
console.log(typeof null) // object  *

<!--引用数据类型-->
const arr = [1, 2, 3]
console.log(typeof arr) // object *
const obj = { name: 'zs' }
console.log(typeof obj) // object
const fn = function () { }
console.log(typeof fn) // function

<!--总结-->
简单数据类型:
通过typeof判断除了null都能拿到正确的值,而且都是字符串类型

null返回object原理是这样的。不同的对象在底层都表示为二进制,在javascript中二进制前三位都为0的话会被判断为object类型,

null的二进制表示全0,自然前三位也是0,所以执行typeof时会返回“object”

引用数据类型:
可以看到数组并没有返回array而是object
原因是ECMAScript中规定所有引用类型都是Object的实例,所以用typeof返回的是object

  1. constructor

const arr = [1, 2, 3]
const obj = { name: 'zs' }
const fn = function () { }

console.log(arr.constructor === Array)  // true
console.log(obj.constructor === Object) // true
console.log(fn.constructor === Function) // true

<!--construtor判断一个实例是否为某个构造函数 返回布尔值-->

  1. instanceof
const arr = [1, 2, 3]
const obj = { name: 'zs' }
const fn = function () { }

console.log(arr instanceof Array) // true 
console.log(obj instanceof Object) // true 
console.log(fn instanceof Function) // true 

<!--判断一个实例是否为某个构造函数的实例化对象  返回布尔值-->
  1. Array.isArray()
const arr = [1, 2, 3]
console.log(Array.isArray(arr)) // true

<!--
判断是不是一个数组,返回布尔值
注意:有兼容问题  ie8以上才行
-->