• 【学习笔记62】判断数据类型的方法


    1. typeof:判断基本数据类型

            console.log(typeof('123'));
            console.log(typeof(123));
            console.log(typeof(true));
            console.log(typeof(undefined));
            console.log(typeof([1, 2, 3]));
            console.log(typeof({a:1}));
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    在这里插入图片描述

    2. constructor

    • 可以判断当前数据的构造函数是谁
            const arr = [1, 2, 3];
            // constructor 指向当前这个原型是那个构造函数的原型
            console.log(arr.__proto__.constructor) ;
            // constructor指向当前这个原型是那个构造函数的原型
            console.log(arr.constructor); 
            console.log(arr.constructor === Array);      // true
            console.log(arr.constructor === Function);   // false
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    在这里插入图片描述

            const arr = [1, 2, 3];
            console.log(arr);                           // 数组
            console.log(arr.__proto__);                 // 自己构造函数的原型对象
            console.log(Array.prototype);               // 构造函数Array的原型对象
            console.log(Array.prototype.constructor);   // 构造函数Array的原型对象
    
    • 1
    • 2
    • 3
    • 4
    • 5

    在这里插入图片描述

    2.1 问题1
    • 不能判断undefined和null
            //undefined内部没有constructor,所以我么不能这样去判断
            console.log(undefined.constructor);  //报错
            
            // null内部没有constructor 所以我们不用这样去判断
            console.log(null.constructor);       //报错   
    
    • 1
    • 2
    • 3
    • 4
    • 5
    2.2 问题2
    • 能够判断引用数据类型,但是这个属性其实就是对象内的一个属性, 我们可以拿到这个对象, 然后修改他的属性值
            const arr = [1, 2, 3];
            console.log(arr);                         
    
            Array.prototype.constructor = { a: 1 };
            console.log(Array.prototype.constructor);
            console.log(arr.__proto__.constructor === Array);
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    在这里插入图片描述

    3. instanceof

    • 可以判断 左边的构造函数是否等于右边的构造函数
    • 语法: 检测的数据instanceof构造函数
    • 问题: 不能判断undefined和null
            const arr = [1,2,3,4]
            const obj = {
                a:1,
                b:2
            }
            console.log(arr instanceof Array);
            console.log(arr instanceof Object); 
            console.log(undefined instanceof undefined);    //报错
            console.log(null instanceof null);              //报错
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    在这里插入图片描述

    4. Object.prototype.toString.call(要判断的数据结构)

    1. Object 这个构造函数的原型内部 有一个toString的方法
    2. 这个方法能够帮我们将数据结构转为字符串的形式,‘[object 数据结构]’
    3. 我们在使用的时候 如果需要判断其他数据类型, 需要使用.call这个方法改变内部this指向
    4. 这个方法任何数据类型都能准确判断(推荐使用)
            console.log(Object.prototype.toString.call(123));
            console.log(Object.prototype.toString.call(undefined));
            console.log(Object.prototype.toString.call(null));
            console.log(Object.prototype.toString.call(function(){}));
            console.log(Object.prototype.toString.call([]));
    
    • 1
    • 2
    • 3
    • 4
    • 5

    在这里插入图片描述

  • 相关阅读:
    2022年湖北应急管理厅特种作业操作证报名需要什么资料?甘建二
    [蓝桥杯 2021 省 AB2] 负载均衡
    关于lua源代码中的EXTRA_STACK宏
    网络安全 DVWA通关指南 SQL Injection(SQL注入)
    Linux系统下如何使用NiMotionUSBCAN转换器?
    Vue 路由懒加载, VueRouter一步完成Vue的路由懒加载 一行代码搞定懒加载
    kubelet源码 删除pod(三)
    RuoYi-Vue 在Swagger和Postman中 上传文件测试方案
    OCR -- 文本检测
    人脸识别:insightface自定义数据集制作 | 附练手数据集
  • 原文地址:https://blog.csdn.net/m0_58190023/article/details/128082071