前端基本功(二):JavaScript 的七種數據類型與數據類型檢測的4種方法

JavaScript 的數據類型與類型檢測

1. 一共有七種數據類型,六種簡單數據類型,一種複雜數據類型。
  1. 簡單數據類型:String、Number、Boolean、Null、Undefined、Symbol。
  2. 複雜數據類型:Object是惟一的複雜數據類型。 Array Function 這些引用類型值最終均可以歸結爲 Object 複雜數據類型。
2. 特殊的基本類型:基本包裝類型

​ js爲了方便操做基本類型值,ECMAscript 提供了3個特殊的引用類型:Boolean、Number 和 String。每當讀取一個基本類型值的時候,後臺就會建立一個對應的基本包裝類型的對象,從而讓咱們可以調用一些方法來操做這些數據。javascript

var s1 = "some text";
// 在這裏建立了一個字符串保存在了變量s1,字符串固然是基本類型值。
// 可是此刻咱們又調用了s1的方法,基本類型值不是對象,理論上不該該有方法。
//其實,爲了讓咱們實現這種直觀的操做,後臺已經幫助咱們完成了一系列的操做。當咱們在第二行代碼中訪問 s1 變量時,訪問過程處於讀取模式,而在讀取模式中訪問字符串時,後臺都會自動完成下列處理。
var s2 = s1.substring(2);
/* 1. 建立 String 類型的一個實例; 2. 在實例上調用指定的方法; 3. 銷燬這個實例。 var s1 = new String("some text"); var s2 = s1.substring(2); s1 = null; */
複製代碼
3. 數據類型的檢測方法
  1. typeof: 對於基本類型出了null(返回 obejct)之外,都可以正確返回。對於複雜類型除了function(返回 function)之外,一概返回object。前端

  2. instanceof:instanceof 運算符用來測試一個對象在其原型鏈中是否存在一個構造函數的 prototype 屬性。(也就是隻能用來判斷兩個對象是否屬於實例關係,而不能判斷一個對象實例具體屬於哪一種類型)。java

    var str = 'text';
     str instanceof String;  // false (包裝類型)
     var arr = [1, 2, 3];
     arr instanceof Array;   // true
     arr instanceof Object;  // true
     // 會返回 true ,是由於 Object 構造函數的 prototype 屬性存在與 arr 這個數組實例的原型鏈上。
    複製代碼
  3. 用對象的 constructor 來判斷對象類型(當檢測 null 或者 undefined 類型的 constructor 屬性時,js會報錯!由於 null 和 undefined 根本就沒有 constructor 屬性)git

    function cstor(variable) {
     if (variable === null || variable === undefined) {
         return 'Null or Undefined';
     }
     
     var cst = variable.constructor;
     
     switch (cst) {
         case Number:
             return 'Number'
         case String:
             return 'String'
         case Boolean:
             return 'Boolean'
         case Array:
             return 'Array'
         case Object:
             return 'Object'
     }
     }
    複製代碼
  4. Object.prototype.toString.call(): 獲取全部對象都擁有的[[Class]]這個內部屬性, 返回字符串"[object class]".github

    /** * @param type 字符串,要檢測的類型的字符串 * @return 類型檢測函數 * 根據傳入的數據類型,返回該類型的類型檢測函數 * 類型檢測使用 toString 函數 */
    function isType(type) {
      return function (val) {
        if (Object.prototype.toString.call(val) === `[object ${type}]`) {
          return true;
        }
        return false;
      };
    }
    
    export let isString = isType('String');
    export let isArray = isType('Array');
    export let isFunction = isType('Function');
    export let isObject = isType('Object');
    export let isNumber = isType('Number');
    複製代碼

    前端基本功系列:歡迎一塊兒學習:github.com/ruralist-si…

相關文章
相關標籤/搜索