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
      }
    }
posted @ 2019-12-25 10:49  carrieLee  阅读(1125)  评论(0编辑  收藏  举报