• JS数据类型管理


      因为JS是一种弱类型语言,在声明变量时不必声明变量类型;变量的类型由运行中存储的数据类型决定,因此变量的类型是随机变化的,为此为保证代码运行的严谨性和代码运行时因隐式转换而导致变量类型的变化所致出现异常情况,我们经常需要对变量类型进行验证处理。因此我们在写代码时要对自己定义的变量类型进行有效的管理,这样能避免很多意外bug和提高debug的效率。

      

    一、JS数据类型

    JS总共有7种数据类型,如下所示:

      1、 6种原始数据类型

      1)String

      2)  Number

      3)  Boolean

      4)  Null 

      5)  Undefine

      6) Symbol (es6)

      2、复合数据类型

      1)  Object

    二、JS数据类型判断

      1、typeof

         typeof操作符能辨别基本的数据类型,并且返回值为表示该数据类型的字符串 ; 但是其能力有限,只能用于来区别原始数据类型,对于其Object类型中的Array、Date 、RegExp 及其 Null 类型无法细分出

                  

        注意:typeof(null) = ' object '  

        null类型判断方法:

        variable === null     //  true 为 null

        variable == null      //   true 为 null 或者 undefined

      2、 instanceof

        用法:object instanceof constructor

        instanceof 运算符用来检测一个构造函数的prototype属性是否存在一个对象的原型链上,即检测该对象是否是一个构造函数的实例化

        (1)可以通过Object.getPrototypeof(object)方法来查看该对象的原型,即该对象内部属性[[Prototype]]的值

           如果 Object.getPrototypeof(object) === constructor.prototype 

           则该所检测对象一定是所测试的构造函数的实例化

        var arr = [] ,
            reg = /is/g ,
            str1 = new String(),
            str2 = 'aaa';
    
        arr instanceof Array      // true
        arr instanceof Object     // true
        arr instanceof RegExp     // false
    
        reg instanceof RegExp     // true
        str1 instanceof String     // true
        str2 instanceof String    // false

        因此我们可以通过 instanceof 运算符对object类型的数据进一步判断来区分 Array、Date 、RegExp 及其 Null 类型

      3、constructor属性

       实例化的对象都有constructor属性,其constructor属性指针指向的是构造函数,可用来判断未知对象的类型

       所以上面的判断方法也可以写成下面的判断方式

        arr.constructor === Array      // true
        arr.constructor === Object     // true
        arr.constructor === RegExp     // false
    
        reg.constructor === RegExp     // true
        str.constructor === String     // true

     4Object.prototype.toString.call() 

    a = 'hello'
    b = []
    c = function(){}
    
    Object.toString.call(a) === "[object String]" 
    Object.toString.call(b) === "[object Array]" 
    Object.toString.call(c) === "[object Function]" 
    

      

    对内贵有志气,对外贵得人心
  • 相关阅读:
    国内使用kubeadm部署kubernetes的完整流程
    Paxos协议笔记
    【LLVM笔记】0x00 初识LLVM 链接类型
    TLS 1.0协议
    风险指针(Hazard Pointer) 内存空间共享模型
    LRU算法
    从.git文件夹探析git实现原理
    Python爬虫与一汽项目【三】爬取中国五矿集团采购平台
    Python爬虫与一汽项目【二】爬取中国东方电气集中采购平台
    Python爬虫与一汽项目【一】爬取中海油,邮政,国家电网问题总结
  • 原文地址:https://www.cnblogs.com/worldly1013/p/6519402.html
Copyright © 2020-2023  润新知