最新公告
  • 欢迎您光临起源地模板网,本站秉承服务宗旨 履行“站长”责任,销售只是起点 服务永无止境!立即加入钻石VIP
  • typeof & instanceof 原理

    正文概述 掘金(当诺)   2021-02-18   621

    typeof & instanceof 原理

    typeof 原理

    • typeof是操作符而不是函数,用来检测变量的类型
    • 数据在底层都表示为二进制,js中前三位(低位)代表数据类型
      • 000:对象
      • 110:布尔
      • 100:字符串
      • 010:浮点数
      • 1:整数

    typeof nullobject是因为null的二进制全是0,所以也被判断为Object类型


    JavaScript 数据类型

    string
    number
    null
    undefined
    boolean
    symbol // ES6引入的数据类型,表示独一无二的值
    BigInt // ES2020引入的新数据类型,它提供了一种方法来表示大于 2的53次方 - 1 的整数。这原本是Javascript中可以用Number表示的最大数字。BigInt可以表示任意大的整数
    object
    
    • 了解两种新的数据类型:symbol & BigInt
    • 除了对象类型,其他数据类型为基本类型
    • 检测数据类型的其它方法Object.prototype.toString(...)

    typeof 不能判断对象为具体哪种对象子类,比如正则、数组、返回值都为object对象,一般通过Object.prototype.toString(...)来查看其内部包含的属性[[class]](对象子类)

    Object.prototype.toString.call(new Date); // "[object Date]"
    Object.prototype.toString.call([]); // "[object Array]"
    Object.prototype.toString.call(/reg/ig); // "[object RegExp]"
    

    instanceof 原理

    • instanceof语法:object instanceof constructor等同于constructor.prototype.isPrototypeOf(object)

    • instanceof的机制是检测构造函数的prototype属性是否出现在某个实例对象的原型链上,是则返回true,否则false

    // instanceof代码实现
    function instanceof(L, R) { //L是表达式左边,R是表达式右边
        const O = R.prototype;
        L = L.__proto__;
        while(true) {
            if (L === null)
                return false;
            if (L === O) // 这里重点:当 L 严格等于 O 时,返回 true 
                return true;
            L = L.__proto__;
        }
    }
    

    总结

    • typeof通过判断二进制数据(低位)前三位得出数据类型
    • instanceof通过判断构造函数的prototype是否出现在实例对象的原型链上得出数据类型
    • 判断数据类型的几种方式:
      typeof
      instanceof
      constructor.prototype.isPrototypeOf
      Object.prototype.toString(...)
    
    • BigInt是ES2020引入的新数据类型,代表任意大的整数,突破之前jsNumber的最大整数限制
    • 手写instanceof实现

    参考链接


    起源地下载网 » typeof & instanceof 原理

    常见问题FAQ

    免费下载或者VIP会员专享资源能否直接商用?
    本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
    提示下载完但解压或打开不了?
    最常见的情况是下载不完整: 可对比下载完压缩包的与网盘上的容量,若小于网盘提示的容量则是这个原因。这是浏览器下载的bug,建议用百度网盘软件或迅雷下载。若排除这种情况,可在对应资源底部留言,或 联络我们.。
    找不到素材资源介绍文章里的示例图片?
    对于PPT,KEY,Mockups,APP,网页模版等类型的素材,文章内用于介绍的图片通常并不包含在对应可供下载素材包内。这些相关商业图片需另外购买,且本站不负责(也没有办法)找到出处。 同样地一些字体文件也是这种情况,但部分素材会在素材包内有一份字体下载链接清单。
    模板不会安装或需要功能定制以及二次开发?
    请QQ联系我们

    发表评论

    还没有评论,快来抢沙发吧!

    如需帝国cms功能定制以及二次开发请联系我们

    联系作者

    请选择支付方式

    ×
    迅虎支付宝
    迅虎微信
    支付宝当面付
    余额支付
    ×
    微信扫码支付 0 元