• 【学习笔记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

    在这里插入图片描述

  • 相关阅读:
    取消task异步任务
    Linux安装vivado方法
    【C++】指针什么时候必须delete,什么时候可以不delete
    【乐吾乐3D可视化组态编辑器】灯光
    【学习笔记】CF1456E XOR-ranges
    vue实现鼠标经过显示悬浮框效果,使用Vue的v-show指令和CSS的:hover伪类,利用Vue的数据绑定
    跨域问题的原理及解决方法
    从零开始的 dbt 入门教程 (dbt core 开发进阶篇)
    Dubbo—— 一个服务既是消费者又是提供者
    有关于脉动调查的这些问题你都知道吗
  • 原文地址:https://blog.csdn.net/m0_58190023/article/details/128082071