在这之前先复习一下JS的数据类型有哪些
基本数据类型:Boolean
、String
、Null
、Undefined
、Number
、Symbol(es6新增)
引用数据类型: Object
、Array
、Function
、RegExp
、Date
等等
typeof
typeof
对于基本数据类型来说,除了null
都可以显示正确的类型
typeof 1 //'number'
typeof '1' //‘string’
typeof undefined // 'undefined'
typeof true // 'boolean'
typeof Symbol() //'symbol'
typeof null // 'object'
- 对于引用数据类型来说,除了函数都会显示
object
,所以typeof
并不适合用来判断引用数据类型
typeof {} // 'object'
typeof [] // 'object'
typeof console.log // 'function'
typeof RegExp // 'object'
typeof Date // 'object'
- 注意:
typeof
返回值是string
类型
typeof typeof 1 // 'string'
instanceof
因此想要判断一个对象的数据类型,这时候可以考虑使用instanceof
,其内部是通过原型链来判断的
const Person=function(){};
const p = new Person();
if(p instanceof Object) {
console.log('我是Object类型')
}else if(p instanceof Array) {
console.log('我是Array类型')
}else if(p instanceof Function) {
console.log('我是Function类型')
}
// 输出我是Object类型
另外:instanceof
返回值是boolean
类型;并且无法判断基本数据类型
let a = 'hello';let b = 1
console.log(a instanceof String) //false
console.log(b instanceof Number) //false
不过数组会被判断成Object,因此instanceof 也不是完美的。因此要想比较准确的判断对象实例的类型时,可以采取 Object.prototype.toString.call
方法。
console.log([] instanceof Object) // true
console.log(Object.prototype.toString.call([])) //[object Array] 返回值是string类型
不是知乎的那个吧
不是本人hh