判断一个变量的数据类型
2021-05-19 本文已影响0人
JosephScript
1、typeof
返回的数据类型:
string number boolean object function undefined symbol
缺点
- typeof null 返回 object
console.log(typeof null) // object
- 引用类型除了 function ,其余都返回 object
console.log(typeof []) // object
console.log(typeof new Date()) // object
console.log(typeof new RegExp()) // object
// ...
2、toString (推荐)
Object.prototype.toString.call('') ; // [object String]
Object.prototype.toString.call(0) ; // [object Number]
Object.prototype.toString.call(true) ; // [object Boolean]
Object.prototype.toString.call(Symbol()); //[object Symbol]
Object.prototype.toString.call(undefined) ; // [object Undefined]
Object.prototype.toString.call(null) ; // [object Null]
Object.prototype.toString.call({}); // [object Object]
Object.prototype.toString.call(new Function()) ; // [object Function]
Object.prototype.toString.call(new Date()) ; // [object Date]
Object.prototype.toString.call([]) ; // [object Array]
Object.prototype.toString.call(new RegExp()) ; // [object RegExp]
Object.prototype.toString.call(new Error()) ; // [object Error]
Object.prototype.toString.call(document) ; // [object HTMLDocument]
Object.prototype.toString.call(window) ; //[object global] window 是 global 的引用
如果对 call 不熟悉的同学,可以查阅一下
JavaScript 中 call()、apply()、bind() 的用法
3、constructor
console.log(''.constructor === String) // true
console.log(new Number(0).constructor === Number) // true
console.log(true.constructor === Boolean) // true
console.log(new Function().constructor === Function) // true
console.log(new Date().constructor === Date) // true
console.log(new Error().constructor === Error) // true
console.log(new Array().constructor === Array) // true
// 或者
console.log([].constructor === Array) // true
console.log(document.constructor === HTMLDocument) // true
console.log(window.constructor === Window) // true
缺点
- undefined 和 null 没有 constructor
- 如果 prototype 被无意修改或者覆盖, 可能会失去 constructor
4、instanceof
大家应该经常看到或者用到:
[] instanceof Array // true
instance 的作用是检测原型, 如果后者是前者的原型,返回 true 否则返回 false
之前的文章 https://www.jianshu.com/p/2f91734532f2 也说过,除了 undefined 和 null,任何数据类型向上查找原型的源头都是 Object。
所以:
console.log([] instanceof Array) // true
console.log([] instanceof Object) // true
注意:instanceof 判断不了一个对象实例和某种类型的关系