JS数据类型管理

  由于JS是一种弱类型语言,在声明变量时没必要声明变量类型;变量的类型由运行中存储的数据类型决定,所以变量的类型是随机变化的,为此为保证代码运行的严谨性和代码运行时因隐式转换而致使变量类型的变化所致出现异常状况,咱们常常须要对变量类型进行验证处理。所以咱们在写代码时要对本身定义的变量类型进行有效的管理,这样能避免不少意外bug和提升debug的效率。javascript

  

1、JS数据类型

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

  一、 6种原始数据类型

  1)Stringes6

  2)  Number函数

  3)  Boolean测试

  4)  Null spa

  5)  Undefineprototype

  6) Symbol (es6)debug

  二、复合数据类型

  1)  Object指针

2、JS数据类型判断

  一、typeof

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

              

    注意:typeof(null) = ' object '  

    null类型判断方法:

    variable === null     //  true 为 null

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

  二、 instanceof

    用法:object instanceof constructor

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

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

       若是 Object.getPrototypeof(object) === constructor.prototype 

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

    var arr = [] ,
        reg = /\bis\b/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 类型

  三、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]" 
相关文章
相关标签/搜索