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]" 
相關文章
相關標籤/搜索