• js中各种数据类型检测与判定


    介绍

    前端开发中,js 有各种各样的数据类型,数据类型检测是每个开发者都必须掌握基础知识。数据类型检测的方法也有很多种,本题将封装一个通用的数据类型检测函数。

    准备

    本题已经内置了初始代码,打开实验环境,目录结构如下:

    .
    └── main.js

    其中:
    main.js 是待补充代码的 js 文件。
    在 main.js 文件中封装好方法以后,可以尝试在该文件中手动调用已经封装好的方法,通过命令 node main.js 来执行文件,打印对应的日志。

    目标

    完善 main.js 中 getType 函数中的 TODO 部分,返回传入值的对应数据类型。

    传入值以及 getType 函数返回值(大小写可忽略)按照如下方式对应:

    传入值 返回值
    ‘s’ string
    0 number

    传入值返回值
    falseboolean
    undefinedundefined
    Symbol()symbol
    function fn(){}function
    123nbigint
    nullnull
    {}object
    []array
    new Datedate
    new Mapmap
    new Setset
    /a/regexp

    测试用例

    // 示例
    const testArr = [
      "s",
      0,
      false,
      undefined,
      Symbol(),
      function () {},
      123n,
      null,
      {},
      [],
      new Date(),
      new Map(),
      new Set(),
      /a/,
    ];
    const result = testArr.map((item) => getType(item));
    console.log("得到的结果:", result);
    /*
    得到的结果:
     [
        'string',  'number',
        'boolean', 'undefined',
        'symbol',  'function',
        'bigint',  'null',
        'object',  'array',
        'date',    'map',
        'set',     'regExp'
      ]
    */
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31

    值得注意的是需要我们区别typeof与instanceof的用法。instanceof运算符用来判断一个构造函数的prototype属性所指向的对象是否存在另外一个要检测对象的原型链上。关于原型链请自行学习,这里不过多解释。typeof返回的是一个字符串,具体用法请见代码。typeof只能检测出图中的8种类型。并且你如果使用typeof检测 null、Date、RegExp、Error都会返回为object类型。所以最好使用instanceof检测

    在这里插入图片描述

    代码

    /**
     * @description: 数据类型检测
     * @param {*} data 传入的待检测数据
     * @return {*} 返回数据类型
     */
     function getType(data) {
      // TODO:待补充代码
        if(typeof data=="String"){
          return 'string';
        }else if( typeof data=="number"){
          return "number"
        }else if(typeof data== "boolean"){
          return "boolean"
        }else if(typeof data=="undefined"){
          return "undefined"
        }else if(typeof data== "function"){
          return "function"
        }else if(typeof data=== "symbol"){
          return "symbol"
        }
        else if(typeof data== "bigint"){
          return "bigint"
        }else if( data=== null){
          return "null"
        }else if(Array.isArray(data)){
          return "array"
        }else if(data instanceof Date){
          return "date"
        }else if(data instanceof RegExp){
          return "regExp"
        }
        else if(data instanceof Map){
          return "map"
        }else if(data instanceof Set){
          return "set"
        }
        else if(typeof data=="string"){
          return "string"
        }else if(typeof data=="object"){
          return "object"
        }
    }
    
    const testArr = [
      "s",
      0,
      false,
      undefined,
      Symbol(),
      function () {},
      123n,
      null,
      {},
      [],
      new Date(),
      new Map(),
      new Set(),
      /a/,
    ];
      const result = testArr.map((item) => getType(item));
    console.log("得到的结果:", result);
    module.exports = {
      getType
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65

    使用

    可以把代码复制到一个js文件中。在终端运行node 文件名.js即可。测试结果如下,结果是从左往右开始读,然后下一行
    在这里插入图片描述

  • 相关阅读:
    [C语言] 结构体
    你读过哪些让你醍醐灌顶的 Java 代码?
    [计算机提升] 环境变量
    Linux内核分析(十五)--内存管理之虚拟地址与mmap原理
    模板的注意事项
    linux-LAMP
    XGboost遥感gis数据的回归预测(复合结果预测, 多列预测)实践(python版)
    Python eval 函数动态地计算数学表达式
    java源码系列:HashMap源码验证,自己手写一个HashMap之02-写put方法以及思路、哈希冲突等
    Tableau常用可视化图形介绍及其适用场景
  • 原文地址:https://blog.csdn.net/qq_51580852/article/details/127657542