JS類型判斷


一、typeof

       適合基本類型及function檢測,遇到null失效

 

 

二、instanceof

          適合自定義對象,也可以用檢測原生對象,在不同iframe和window間檢測時失效

 

三.Object.prototype.toStirng.call()和Object.prototype.toString.apply()

      

 

 實例

    要求:

       1. 數組中的成員類型相同,順序可以不同。例如[1, true] 與 [false, 2]是相似的。

       2. 數組的長度一致。

       3. 類型的判斷范圍,需要區分:String, Boolean, Number, undefined, null, 函數,日期, window.

        當以上全部滿足,則返回"判定結果:通過",否則返回"判定結果:不通過"。

 

 

       

let data = [{
      arr1: [1, true, null],
      arr2: [null, false, 100],
      expect: true
    }, {
      arr1: [function () {}, 100],
      arr2: [100, {}],
      expect: false
    }, {
      arr1: [null, 999],
      arr2: [{}, 444],
      expect: false
    }, {
      arr1: [window, 1, true, new Date(), "hahaha", (function () {}), undefined],
      arr2: [undefined, (function () {}), "okokok", new Date(), false, 2, window],
      expect: true
    }, {
      arr1: [new Date()],
      arr2: [{}],
      expect: false
    }, {
      arr1: [window],
      arr2: [{}],
      expect: false
    }, {
      arr1: [undefined, 1],
      arr2: [null, 2],
      expect: false
    }, {
      arr1: [new Object, new Object, new Object],
      arr2: [{}, {}, null],
      expect: false
    }, {
      arr1: null,
      arr2: null,
      expect: false
    }, {
      arr1: [],
      arr2: undefined,
      expect: false
    }, {
      arr1: "abc",
      arr2: "cba",
      expect: false
    }];
    for (let i = 0; i < data.length; i++) {
      if (arraysSimilar(data[i].arr1, data[i].arr2)) {
        console.log("通過")
      } else {
        console.log("不通過")
      }
    };

    function arraysSimilar(arr1, arr2) {

      let compareArr1 = arr1;
      let compareArr2 = arr2;
      console.log(Object.prototype.toString.call(compareArr1))
      console.log(Object.prototype.toString.call(compareArr2))
      let typeObj = {};
      //第一個if確定了類型相同,//第二個if確定了長度相同,//里面的代碼實現數組一和數組二的數據類型都相同
      if (Object.prototype.toString.call(compareArr1) == "[object Array]" && Object.prototype.toString.call(
          compareArr2) == "[object Array]") {
        console.log("類型相同")
        if (compareArr1.length == compareArr2.length) {
          console.log("長度相同")
          for (let i = 0; i < compareArr1.length; i++) {
            let type = Object.prototype.toString.call(compareArr1[i])
            typeObj[type] = 123
          }
          for (let i = 0; i < compareArr2.length; i++) {
            let type = Object.prototype.toString.call(compareArr2[i])
            console.log(typeof typeObj[type])
            if (typeof typeObj[type] != 'undefined') {
              return true
            } else {
              return false
            }
          }
        } else {
          return false
        }
      } else {
        return false
      }
    }


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM