欢迎访问我的个人博客:http://www.xiaolongwu.cn
前言
最近工作有点忙,好几天都没更新技术博客了。
周末起床打开有道云笔记,发现自己的博客 todolist 里躺了一堆只有名字的文件。
话不多说,我们开干,加油!
干货满满
今天,我们一起学习一下 js 中的数据类型检测相关的知识,也顺便做个总结。
1、数据类型介绍
我们都知道,在 js 中分为基本数据类型和复杂数据类型。
基本数据类型又包括 Sting Number Boolean Null Undefined,还有一个 es6 新增的 Symbol,我们这先不说。
复杂数据类型只有一种,那就是 Object。
我们平时见到的数组 Array、正则 RegExp、时间对象 Date、函数 Function 等都属于 Object。
2、如何判断基本数据类型
这点想必大家都知道,但是我还是要在这里啰嗦一下。
判断基本数据类型我们可以选择 typeof 来判断。
这里需要注意就是返回值,他的返回值为小写字母开头的字符串。
// 字符串
typeof ‘leon’ // ‘sting’
// 整数
typeof 22 // ‘number’
//undefined
typeof undefined // ‘undefined’
//Boolean
typeof true // ‘boolean’
//Null
typeof null // ‘object’ 这为什么是 object?
// 因为 null 表示的是一个空指针,指针表示的是引用型数据,所以返回 object
//Object
typeof [1,2.3] //’object’
typeof {a: ‘ww’} //’object’
typeof new Date() //’object’
//function
typeof function(){} //”function”
3、instanceof
instanceof 是用来检测引用类型,检测是那种类型的实例。
他的返回值为 Boolean 值,真为 true,否则为 false。
不能检测 null,会报错。
// 这种检测方式一般不常用
[1, 2] instanceof Array //true
({a: 1}) instanceof Object //true
(function(){}) instanceof Function //true
4、Constructor
返回结果为构造器,也可以检测自定义类型;
但是不适用于 null 和 undefined。
‘leon’.constructor == String // true
(1234).constructor == Number // true
(true).constructor == Boolean // true
[1, 2].constructor == Array // true
({name:’leon’}).constructor == Object // true
(function(){}).constructor == Function // true
检测自定义类型
function Leon(){}
var leon = new Leon();
leon.constructor == Leon; // true
5、Object.prototype.toString.call(obj)
这种方式是最权威的,也是很多框架插件中用到的方法,推荐使用;
Object.prototype.toString.call(‘leon’); //”[object String]”
Object.prototype.toString.call(1234); //”[object Number]”
Object.prototype.toString.call(true); //”[object Boolean]”
Object.prototype.toString.call([1,2,3]); //”[object Array]”
Object.prototype.toString.call({name:’leon’}); //”[object Object]”
Object.prototype.toString.call(function(){}); //”[object Function]”
Object.prototype.toString.call(null); //”[object Null]”
Object.prototype.toString.call(undefined); //”[object Undefined]”
实际使用时,可以这么写
var test = Object.prototype.toString.call(‘leon’);
if(test == “[object String]”) {
console.log(‘ 这是个字符串 ’)
}
// 当然我们也可以选择用正则去判断第二个单词,从而得到数据的类型
github 文章资源地址:js 基础 – 数据类型检测的相关知识
我的 CSDN 博客地址:https://blog.csdn.net/wxl1555
如果您对我的博客内容有疑惑或质疑的地方,请在下方评论区留言,或邮件给我,共同学习进步。
邮箱:wuxiaolong802@163.com