判断一个变量的数据类型

2021-05-19  本文已影响0人  JosephScript

1、typeof

返回的数据类型:
string number boolean object function undefined symbol

缺点
console.log(typeof null) // 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() 的用法

https://www.runoob.com/w3cnote/js-call-apply-bind.html

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
缺点

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 判断不了一个对象实例和某种类型的关系

上一篇下一篇

猜你喜欢

热点阅读