数据类型分类
基本数据类型: String、Number、Boolean、Symbol、Undefined、Null
引用数据类型: Object、Function、Array、Date等
一、typeof
typeof 是一个操作符,其右侧跟一个一元表达式,并返回这个表达式的数据类型。返回的结果用该类型的字符串(全小写字母)形式表示,包括以下 7 种:number、boolean、symbol、string、object、undefined、function 等
console.log(typeof 'abc') // 'string'
console.log(typeof 123) // 'number'
console.log(typeof true) // 'boolean'
console.log(typeof undefined) // 'undefined'
console.log(typeof Symbol()) // symbol
console.log(typeof null) // 'object'
console.log(typeof function(){}) // 'function'
console.log(typeof []) // 'object'
console.log(typeof new Date()) // 'object'
-
对于基本类型,除 null 以外,均可以返回正确的结果
-
对于引用类型,除 function 以外,一律返回 object 类型
-
对于 null ,返回 object 类型
-
对于 function 返回 function 类型
所有对于基本类型的判断,使用typeof基本能够实现
二、instanceof
instanceof 是用来判断 A 是否为 B 的实例,表达式为:【A instanceof B】,如果 A 是 B 的实例,则返回 true,否则返回 false。 在这里需要特别注意的是:instanceof 检测的是原型,即
A.__proto__===B.prototype,关于原型可以看我之前的文章-'构造函数、原型(prototype)、原型链'
console.log([] instanceof Array) // true
console.log({} instanceof Object) // true
console.log(new Date instanceof Date) // true
console.log(new Function instanceof Function) // true
三、Object.prototype.toString.call()
toString() 是 Object 的原型方法,调用该方法,默认返回当前对象的 [[Class]] 。这是一个内部属性,其格式为 [object Xxx] ,其中 Xxx 就是对象的类型
console.log(Object.prototype.toString.call('')) // [object String]
console.log(Object.prototype.toString.call(1)) // [object Number]
console.log(Object.prototype.toString.call(true)) // [object Boolean]
console.log(Object.prototype.toString.call(Symbol())) //[object Symbol]
console.log(Object.prototype.toString.call(undefined)) // [object Undefined]
console.log(Object.prototype.toString.call(null)) // [object Null]
console.log(Object.prototype.toString.call(new Function())) // [object Function]
console.log(Object.prototype.toString.call(new Date())) // [object Date]
console.log(Object.prototype.toString.call([])) // [object Array]
console.log(Object.prototype.toString.call(new RegExp())) // [object RegExp]
console.log(Object.prototype.toString.call(new Error())) // [object Error]
console.log(Object.prototype.toString.call(document)) // [object HTMLDocument]
console.log(Object.prototype.toString.call(window)) //[object global] window 是全局对象 global 的引用
这种方法对于所有的数据类型基本上都可以判断
封装一个判断方法:
const getType = (value) => {
return Object.prototype.toString.call(value).slice(8, -1)
}
console.log(getType("")) // String