• 检测数据类型


    [1]typeof

    typeof一般是用于检测简单数据类型的;

    (1)语法:

    • typeof(数据)
    • typeof 数据

    (2)缺点:

    • 结果具有不准确性–>对于null、array数据 检测结果为object

    (3)举例说明

    console.log(typeof 0) // number
    console.log(typeof '0') // string
    console.log(typeof true) // boolean
    console.log(typeof undefined) // undefined
    console.log(typeof null) //object
    typeof [] // object
    typeof function(){} // function
    let sy=Symbol('xx')
    console.log(typeof sy); //symbol
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    [2]isNaN
    • isNaN是window的方法,可以用于检测数据是否为数字类型;

    • 语法

      • window.isNaN(value)
        
        • 1
    • 举例说明

      • isNaN(111) // false
        
        • 1
    • 缺点

      • 结果存在不准确性

        • 数字、(转化为Number类型不为NaN的)字符串、(转化为Number类型不为NaN的)的数组、null都会被认作数字

        • isNaN('11') // false
          isNaN('a') // true
          isNaN(11) // false
          isNaN(null) // false
          isNaN(undefined) // true
          isNaN([11]) // false
          isNaN([11.,12]) // true
          
          • 1
          • 2
          • 3
          • 4
          • 5
          • 6
          • 7
    [3]instanceof

    (1)语法: 数据 instanceof 构造函数

    (2)执行原理(本质):检测右面构造函数的原型对象是否在左侧数据地原型链上;

    (3)缺点:结果存在不准确性;

    (4)以检测数组为例(前提:数组的构造函数为Array)

     console.log([111] instanceof Array); // true
     console.log([111] instanceof Function); // false
     console.log([111] instanceof Object); // true
    
    • 1
    • 2
    • 3
    • [1]当检测[111]是否为数组----true(原因是因为Array.prototype==[111].proto)

    img

    • [2]当检测[111]是否为函数—false
      • 因为[111]的原型链上没有Function.prototype
    • [3]当检测[111]是否为对象–true(结果错误)
      • [111].proto.protp=Object.prototype

    img

    [4]isArray

    Array原型上存在isArray方法,用于检测数据是否为数组;

    (1)语法:Array.isArray(value)

    (2)举例说明:

    console.log(Array.isArray([111])) //true
    console.log(Array.isArray({ 1: '111' })) //false
    
    • 1
    • 2
    [5]万能检测数据类型

    (1)语法:Object.prototype.toString.call(数据)

    (2)优点:

    • (1)对于任何数据都适用;
    • (2)没有错误情况;

    (3)原理:

    • 前提:
      • 很多构造函数的原型对象都具有toString方法,eg:Array.toString();
      • 但是只有Object构造函数的toString方法的作用是检测数据类型的;
    • 执行原理:
      • 检测数据类型,修改toString方法的this指向;
      • 相当于此数据去调用Object原型对象上的toString方法;
      • 这样就检测出此数据的数据类型了!
    • 注意点:
      • 原理上null与undefined是不能够修改this指向的(修改是失败的);
      • 但js是弱语言,很多地方不太完整(很多时候null,undefined是当作对象的)

    (4)举例说明

     console.log(Object.prototype.toString.call(1)) // [object Number]
          console.log(Object.prototype.toString.call('1')) // [object String]
          console.log(Object.prototype.toString.call(true)) // [object Boolean]
          console.log(Object.prototype.toString.call(null)) // // [object Null]
          console.log(Object.prototype.toString.call(undefined)) // [object Undefined]
          console.log(Object.prototype.toString.call(Symbol('xx')))// [object Symbol]
          console.log(Object.prototype.toString.call([111])) // [object Array]
          console.log(Object.prototype.toString.call({ 1: '11' }))// [object Object]
          console.log(
            Object.prototype.toString.call(function a () {
              console.log('11')
            })
          ) // [object Function]
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
  • 相关阅读:
    高可用双机GPFS集群的的自动化部署脚本
    猴赛雷 ! 上次我见过这么厉害的安全测试实战演练还是上次!
    最短路问题
    JS如何反转字符串以及如何将数字转换为数字数组
    Java 下载excel文件
    面试20k的测试工程师什么水平?知彼知己百战不殆...
    [开发] java日期操作
    pxe网络装机
    SAP UI5 Form 和 Simple Form 的设计规范
    [NCTF2019]Fake XML cookbook XML注入
  • 原文地址:https://blog.csdn.net/qq_43260366/article/details/126619044