JavaScript- 关于数据类型及其判断方法(超全)

JavaScript- 数据类型

分了2大类型:简单数据类型、复杂(引用)数据类型

涉及到数据类型的情况下,我们可以联想到typescript,ts是强类型语言,变量会进行类型检查,变量类型限制死,不能随便更改;

而js是弱类型语言,变量类型没限制死,可以随时改变

1、简单数据类型介绍

​ 简单数据类型也叫做基本数据类型、值类型,因为起单纯存储值。

  • Number:数值型(数字型),参与数学运算做数字的标识 ,例子:1,3,4

  • String:字符串型,用来表示文字的 ''和""和 ``

    'jessica'"jessica"`jessica`1左边的那个键)
    
  • Boolean:布尔类型 true和false2种状态

  • undefined:未定义类型,代表未定义(只声明没赋值)

  • null :空值类型,代表定义未赋值

  • NaN:数字值(number),表示不是一个合法的数字

    • // 怎么产生的?
      Number('abc'); // NaN
      Number('undefined') // NaN
      
    • 注意点:NaN是唯一一个与自己不相等的值 ;

    • 如何辨别NaN;isNaN(NaN) // true;

  • Symbol(符号,ES6新增):Symbol是一种新的基本数据类型,用于表示独一无二的值。它可以用作对象属性的键,以确保属性的唯一性。

2、复杂数据类型介绍

​ 复杂数据类型也叫引用数据类型,它可以通过new关键字去创建新的实例

  • Object:对象类型,表示一组数据、功能相关的内容,树状结构,每个键值对应属性名和属性值;

  • Array:数组类型,有序的数据集合,也可以为树状结构,叫多维数组,有对应的长度、索引;

  • Function:函数类型,表示可以执行的代码块,可以接收参数也可以返回内容;

    以下为ES6新引入的数据类型

  • Set(集合):Set是一种新的数据结构,它类似于数组,但是成员的值都是唯一的,没有重复的值。

  • Map(映射):Map是一种新的数据结构,它类似于对象,但是键可以是任意类型,而不仅限于字符串。

  • Promise(承诺):Promise是一种用于处理异步操作的对象。它表示一个异步操作的最终完成或失败,并可以返回结果或错误信息。

  • Proxy(代理):Proxy是一种用于创建对象的代理,可以拦截并自定义对象的操作。它可以用于实现属性的拦截、验证、修改等功能。

  • Class(类):ES6引入了class关键字,用于定义类。类是一种面向对象编程的基本概念,可以用于创建对象和定义对象的行为。

3、如何检测数据类型

简单数据类型:
  • typeof(数据/变量名): 返回简单数据类型(除了null)、函数类型(string、boolean、function等)只能准确判断简单数据类型和函数(函数其实是对象,并不属于另一种数据类型,但也能够使用 typeof 进行区分),无法精确判断出引用数据类型(统统返回 object)
复杂数据类型:
  • 被检测变量.instanceof(引用类型(Boolean)):返回布尔值,准确判断复杂数据类型

    ​ instanceof运算符返回一个布尔值,可以用于检测构造函数的 prototype 属性是否出现在某个实例对象的原型链上,通俗说就是用于判断某个实例是否属于某构造函数。再通俗一点就是,只要右边变量的prototype在左边变量的原型链上就返回 true,否则返回 false。

    //如何实现instanceof函数,
    // arr instanceOf Array  ====>返回布尔类型
    function(left,right){
        if(typeOf left !== object ||left === null ) return false;
        let pro = Object.getPrototypeOf(left);
        while(true){
            if(pro === null) return null;
            if(pro === right.prototype) return true;
            pro = pro.getPrototypeOf(pro);
        }
    }
    
全部类型:Object.prototype.toString.call(),返回类型

4、typeof 和 instanceof的区别总结

  • typeof ,但只能准确判断基本数据类型(null除外),无法精确判断出引用数据类型(function 除外)
  • instanceof通过判断原型,但只可以准确判断引用数据类型,但是不能正确判断原始数据类型,返回 true或 false
  • Object.prototype.toString.call()方法可以作为通用检测数据类型
  • 22
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值