面试题系列之javascript数据类型检测

2 篇文章 0 订阅

JS中的数据类型

七中内置类型

  • 空值(null)
  • 未定义(undefined)
  • 布尔值(boolean)
  • 数字(number)
  • 字符串(string)
  • 对象(object)
  • 符号(symbol,ES6新增)

六种基本类型

除object外,其他六种为基本类型

JS中数据类型检测的几种方法

  • typeof

底层机制:直接在计算机底层基于数据类型的值(二进制)进行检测

缺点1:typeof null为“object”
原因:在计算机中对象存储都是以000开头的二进制存储,null也是,所以用typeof检测null的类型为“object”

缺点2:typeof 普通对象/数组对象/正则对象/日期对象都是“object”

  • instanceof 检测当前实例是否属于这个类

底层机制:只要当前类出现在实例的原型链上,结果都为true

缺点1:可以人为肆意修改原型的指向,因此检测结果并不准确

缺点2:不能检测基本数据类型

  • consttructor

可以支持基本数据类型检测

缺点:constructor也可以随意更改,结果也不准确

  • Object.prototype.toString.call()

标准检测数据类型的方法,此方法不是转换为字符串,而是返回当前实例所属类的信息

可以检测的类型包括
“[object Number/String/Boolean/Null/Undefined/Symbol/Object/Array/RegExp/Date/Function]”

总结

最理想的检测数据类型的方法是结合typeof和Object.prototype.toString.call()

(function () {
    var class2type = {};
    var toString = class2type.toString; //=>Object.prototype.toString

    // 设定数据类型的映射表
    ["Boolean", "Number", "String", "Function", "Array", "Date", "RegExp", "Object", "Error", "Symbol"].forEach(name => {
        class2type[`[object ${name}]`] = name.toLowerCase();
    });

    function toType(obj) {
        if (obj == null) {
            // 传递的值是null或者undefined,就返回对应的字符串
            return obj + "";
        }
        // 基本数据类型都采用typeof检测
        return typeof obj === "object" || typeof obj === "function" ?
            class2type[toString.call(obj)] || "object" :
            typeof obj;
    }

    window.toType = toType;
})();
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值