Js 知识点巩固

js判断数据类型四种方法以及优缺点

1 typeof

基本类型:String、Number、Boolean、Null、Undefined、Bigint、Symbol(es6的新数据类型)

引用类型:Object、Array、Date、Function、Error、RegExp、Math、Number、String、Boolean、Globle。(感觉没有必要完全记住)

typeof判断的是基本类型(null返回的是 object),函数返回 function。

缺点:typeof判断null返回object,函数返回 function,其余引用类型返回的都是object

知识点延伸:

栈内存和堆内存

栈内存主要用于存储各种基本类型堆内存主要负责像引用类型的存储。

栈内存:栈会自动分配固定大小内存空间,会自动释放,存取速度比堆快,仅次于直接位于CPU中的寄存器,数据可以共享。

堆内存:动态分配大小不定的内存空间,不会自动释放。

typeof null是Object

js中对象使用二进制存储,二进制前三位都是0,系统会判断为Object类型,而null的二进制全是0,所以判断为Object

这个bug是初版本的JavaScript中留下的,扩展一下其他五种标识位:

000 对象
1 整型
010 双精度类型
100字符串
110布尔类型

Symbol.toStringTag

加上toStringTag属性,自定义的类也会有自定义的类型标签了。

class TestToStringTagClass {
    get [Symbol.toStringTag]() {
        return "TestToStringTag"
    }
}
Object.prototype.toString.call(new TestToStringTagClass())

typeof 结果就是读取对象上面的Symbol.toStringTag属性。

2 instanceof

实现原理

function instanceof(L, R) {
    var RP = R.prototype
    var LP = L.__proto__
    while(true) {
        if(LP === null) {
            return false
        }
        if(LP === RP) {
          return true
        }
        LP = LP.__proto__
    }
}

A  instanceof B

对象的构造函数原型(_proto_隐式原型)是否等于目标对象的原型。

缺点:instanceof 不能完全精确的判断object类的具体数据类型。

推广一下自己开发的微信小程序,有兴趣的朋友可以玩一玩

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值