博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
JavaScript判断数据类型
阅读量:7108 次
发布时间:2019-06-28

本文共 3076 字,大约阅读时间需要 10 分钟。

JavaScript中的数据类型分为基础数据类型和引用数据类型,其中

基本数据类型:string、number、boolean、undefined、null和Symbol,

引用数据类型:Object、Function、Date、RegExp、Number、String、Boolean

因为一般情况下不会以如下方式创建字符串和数字,故本文不讨论这种类型。

let str = new String('str'),num = new Number(123),boole = Boolean(true);复制代码

首先创建一些供检测的变量

let myNull = null,myUndefined = undefined,mySymbol = Symbol(123),str = 'str',num = 123,boole = false,arr = [1,2,3],obj = {  name:'obj.name'},date = new Date(),reg = /\d{6}/g;function foo(){};复制代码

typeof

首先用常用的方式typeof判断一下

console.log(typeof myNull);      // objectconsole.log(typeof myUndefined); // undefinedconsole.log(typeof mySymbol);    // symbolconsole.log(typeof str);         // stringconsole.log(typeof num);         // numberconsole.log(typeof boole);       // booleanconsole.log(typeof arr);         // objectconsole.log(typeof obj);         // objectconsole.log(typeof date);        // objectconsole.log(typeof reg);         // objectconsole.log(typeof foo);         // function复制代码

可见typeof方法对于null和引用数据类型都会返回object,对于其他基本数据类型以及function的判断都是准确的(typeof null === 'object'的原因这里不赘述)

instanceof

对于typeof无法准确判断引用数据类型,可以采用instanceof进行补充判断

console.log(arr instanceof Array);    // trueconsole.log(obj instanceof Object);   // trueconsole.log(date instanceof Date);    // trueconsole.log(reg instanceof RegExp);   // trueconsole.log(foo instanceof Function); // true复制代码

如上所示,此方法只适合判断变量是不是想要的引用数据类型

constructor 

而对于不需要判断null和undefined的情况,我们还可以使用constructor 

constructor 属性返回对创建此对象的数组函数的引用

console.log(mySymbol.constructor === Symbol); // trueconsole.log(str.constructor === String);      // trueconsole.log(num.constructor === Number);      // trueconsole.log(boole.constructor === Boolean);   // trueconsole.log(arr.constructor === Array);       // trueconsole.log(obj.constructor === Object);      // trueconsole.log(date.constructor === Date);       // trueconsole.log(reg.constructor === RegExp);      // trueconsole.log(foo.constructor === Function);    // true复制代码

和instanceof类似,constructor 方法只适合判断变量是不是想要的引用数据类型,但是它可以判断null和undefined除外的所有数据类型,之所以null和undefined不可以,是因为他们作为JavaScript运行环境创建时就存在的基本数据类型,不存在constructor属性

Object.prototype.toString()

那有没有一种方法可以准确的判断所有数据类型的数据类型呢,推荐如下方法

console.log(Object.prototype.toString.call(myNull));      // [object Null]console.log(Object.prototype.toString.call(myUndefined)); // [object Undefined]console.log(Object.prototype.toString.call(mySymbol));    // [object Symbol]console.log(Object.prototype.toString.call(str));         // [object String]console.log(Object.prototype.toString.call(num));         // [object Number]console.log(Object.prototype.toString.call(boole));       // [object Boolean]console.log(Object.prototype.toString.call(arr));         // [object Array]console.log(Object.prototype.toString.call(obj));         // [object Object]console.log(Object.prototype.toString.call(date));        // [object Date]console.log(Object.prototype.toString.call(reg));         // [object RegExp]console.log(Object.prototype.toString.call(foo));         // [object Function]复制代码

如果有错误或者不严谨的地方,请给予指正,十分感谢!

转载于:https://juejin.im/post/5ca5c311f265da30a67bd932

你可能感兴趣的文章
crm查询和删除审核历史记录
查看>>
2019春总结作业
查看>>
hashMap与hashTable的区别
查看>>
Synchronized关键字
查看>>
第五组用户使用情况报告
查看>>
轻松搞定面试中的红黑树问题
查看>>
在更新过程中,玩家存储空间满了的处理办法
查看>>
php discuz框架接口不能正常访问的问题
查看>>
ORACLE恢复误删的表数据
查看>>
mysql查询当天,前一天,一周,一个月
查看>>
Python学习一:序列基础详解
查看>>
数组排序
查看>>
Recycleview实现复杂布局
查看>>
jq禁止与启动滚动条
查看>>
ffmpeg去水印
查看>>
JSF通过超链接传递参数到控制层
查看>>
C#入门篇-3:数据类型及转换
查看>>
Leetcode Simplify Path
查看>>
Kafka吞吐量测试案例
查看>>
easyui datagrid 前后台代码
查看>>