Javascript 值类型判断系列

概要: 之所以写这篇文章是对之前Javascript数据类型判断感到模糊的地方的总结,如果你之前也对程序中的一个未知变量的类型判断感到疑惑,可以看看这篇文章,如果你自认为拿到一个变量后完全可以知道这是什么类型,就无需再看这篇文章了,不要浪费宝贵的学习时间。

1. 前提准备:

var array = [1]; // 数组类型
var string = "string"; // 字符串
var object = {foo:1}; // 字面量定义的对象
var number = 10; // 数字
var boo = true; // 布尔
var no = null; // null

上面这些是最常见的数据类型了,我只列举这些了,基本会了这些的判断就可以判断所有的数据类型了。

2. 最方便的方法Object.toString.call(变量) 结合正则去判断

以下是一种场景,判断array变量是否是数组:

var array = [1];

// 假设不知道上一句话,在程序中拿到手的就是array

var foo = Object.prototype.toString.call(array); // 这一句返回的字符串是判断的依据

// 利用正则去判断foo是不是数组
if (/\[object Array\]/.test(foo)) {
    // 是Array类型就打印foo
    console.log(foo);
}

上面的var foo = Object.prototype.toString.call(array);和/\[object Array\]/.test(foo)是最重要的两句。

第一句的输出结果就是类似于[object x]唯一的不同就在于x,每种不同的数据类型返回的x都不一样,如数组是Array而字符串是String等待。

如果两句话看不懂,可能需要去补一下原型和call方法以及正则的知识了。

第二句的正则判断更简单了,利用正则对象的test方法去匹配判断是否是我们想要的类型。

这种方法只能判断一种变量是否是我们想要的类型,如果你想一次性写好所有方法便于以后判断,可以写类似这样的函数

isArray: function(foo) {
    if (!foo) {
        return false;
    }
    var bar = Object.prototype.toString.call(foo);
    if (/\[object Array\]/.test(bar)) {
        return true;
    }
    return false;
}

只要按照数据类型依次去扩展这样的方法,就可以判断所有的数据类型了,很多框架都封装有这样的方法,如我们公司的框架或者lodash等等。

不过判断数据类型不必完全采取这种正则加toString的方式,可以视情况而定,例如判断数据是不是数组就有利用原型链判断或者instanceof操作符等等,不必拘泥于一种固定方式,只是这种方式比较统一有效。

3. 从原型判断

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值