判断一个变量的数据类型

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() 的用法

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容