js检测数据类型的方法

前言

首先得知道js数据类型,分为基本数据类型和复杂数据类型。

基本数据类型

Number(数值类型),String(字符串),Boolean(布尔型),null(空对象),undefined(未初始化变量),Symbol(唯一标识符),Bigint(比Number范围更大的数值型)

复杂数据类型

Object

检测基本数据类型

typeof 返回对应的类型
var n='abc'
console.log(typeof(n))//String

检测复杂类型

1.instanceof 返回一个布尔值

注:instanceof只能检测一个实例是不是属于某个类,不能检测NUll和Undefined。

console.log([1,2,3] instanceof  Array)//true
console.log(123 instanceof Number)//false 不能检测基本数据类型
2.constructor 返回一个布尔值

注:constructor属性存在于构造函数的原型上,指向构造函数,对象可以通过proto在其所属类的原型上找到这个属性,但不能检测实例化的函数。

console.log(("1,2,3").constructor===String)//true
console.log(([1,2,3]).constructor===Array)//true
console.log((Function(){}).constructor===Function)//true

一个小小的不同

function Fn(){};

Fn.prototype=new Array();

var f=new Fn();
console.log(f.constructor===Fn);   //false
console.log(f.constructor===Array); // true
3.Object.prototype.toString.call()

上面两种方法都有局限,第三种方法解决了上面的问题

console.log(Object.prototype.toString.call(345));              //[object Number]
console.log(Object.prototype.toString.call('huhuhuh'));             //[object String]
console.log(Object.prototype.toString.call(true));            //[object Boolean]
console.log(Object.prototype.toString.call(null));            // [object Null]
console.log(Object.prototype.toString.call(undefined));         //[object Undefined]
console.log(Object.prototype.toString.call([]));             // [object Array]
console.log(Object.prototype.toString.call({}));             // [object Object]
console.log(Object.prototype.toString.call(/^$/));            //[object RegExp]
console.log(Object.prototype.toString.call((function () {})));     //[object Function]

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