JavaScript 数据类型总结


theme: condensed-night-purple

JavaScript 数据类型和数据结构

空投来啦!!!

随手笔记总结,随时补充;如有误之处,请留言指出,在此先感谢各路大佬🙏

数据类型.png

数据类型

JavaScript 语言中类型集合由原始值和对象组成。

原始值(直接表示在语言底层的不可变数据)
  • 布尔类型 :布尔值是一种取值仅能为 真 或 假 的数据类型,它赋予了编程语言在逻辑上表达真 或 假 的能力;

Boolean:布尔值是一种取值只有 真 或 假 的数据类型,它可以在代码逻辑上表达真 或 假 的能力

  • 如果值为以下情况之一则为false

    • 0

    • -0

    • null

    • false -NaN

    • undefined

    • 空字符串「""

    • 否则为true

    • 其值不是undefined或null的任何对象「所有的对象类型」(包括其值为false的布尔对象)在传递给条件语句时都将计算为true

        const f = new Boolean(false); if(f){// 执行} 
        const f = Boolean(false); if(f){// 执行}
      
    • 转换布尔值的方法

      • Boolean(123) 「直接将Boolean当作转换函数使用」
      • !!(123) 「双重非运算符」
      • new Boolean(123) 「不推荐,不要用创建对象的方式进行类型转换;对于任何对象来说,即使值为falseBoolean对象,使用此方法转换结果都是true
    • 注意:不要在应该使用基本类型布尔值的地方使用Boolean对象

    • 实例方法

    • Boolean.prototype.toString()

      • 以字符串形式返回该布尔对象的值
      • 不会继承Object.prototype.toString()
    • Boolean.prototype.valueOf()

      • 返回一个Boolean对象的原始值「基本类型值」

            const x = new Boolean(null); 
            console.log( x.valueOf() ) // false
           // 首先会进行隐式转换,其次在进行比较
            Boolean(null) ==> false
        
  • 数字类型 :是一种基于 IEEE 754 标准的双精度 64 位二进制格式的值;

    • 整数

    • +0 / -0

         console.log(+0 === -0) ==> true
         console.log(1 / +0) ==> Infinity
         console.log(1 / -0) ==> -Infinity
      
    • 负数

    • 小数

    • +/-Infinity

      • 检查数值是否大于或者小于+/-InfinityNumber.MAX_VALUE / Number.MIN_VALUE
      • 最大安全数和最小安全数:Number.MAX_SAFE_INTEGER / Number.MIN_SAFE_INTEGER
      • 检查是否在安全数之内:Number.isSafeInteger() - NaN(非数值,Not-a-Number
    • 用途:一般用于浏览器的隐式转换中

      • 数学运算
      • isNaN 检测
      • == 比较
  • 字符串类型 :;

    • "" / '' / String()
    • 字符串一旦被创建,就不能被修改
  • Undefined类型 :一个没有被赋值的变量会有个默认值 undefined

    • 标识符:用来标识变量/函数/属性的字符序列

    • 全局对象的一个属性 undefined「全局作用域的一个变量」

    • 函数没有return返回值,就会返回一个undefined

    • 用途

      • 判断变量是否有值

        • 判断变量是否与undefined严格相等,若相等则变量有值
      • 判断变量是否被声明

      • 一般会使用typeof来判断变量是否存在,其优点:

        • typeof 不会在变量没有被声明时抛出错误,所以不会阻塞代码执行
        • 注意:必须使用严格相等操作符,否则会出现值为null的情况
      • 通过判断变量是否在当前上下文中被声明;如果是全局上下文,可以通过全局对象来检查是否存在当前属性

        • in 操作符:指定的属性在指定的对象或其原型链中,则in 运算符返回true

        • void 运算符:对给定的表达式进行求值,然后返回 undefined

          • 一般只用于获取undefined的原始值,一般使用void(0)
          • 当函数返回值是一个不会被使用到的时候,应该使用 void 运算符,来确保返回 undefined
    • == === 的区别:

      • == :判断值相等则返回true,不会判断类型是否相等
      • === :判断类型和值都相等则返回true
  • Null类型 :特指对象的值未设置

    • 是一个字面量

    • 变量未指向任何对象 「表示一个空指针」

    • 返回类型是一个对象,但是没有关联任何的值

    • nullundefined 的区别:

      • “==” 相等「内部会进行隐式转换」==> true
      • “===” 全等 「内部不会进行隐式转换」==> false
  • Symbol类型:是唯一且不可修改的原始值

    • 创建symbol数据类型:let sym = Symbol();

    • 该类型的性质在于这个类型的值可以用来创建匿名的对象属性

      • 该属性是匿名的,并且是不可枚举的,所以:

        • 不是for..in循环中的成员
        • 不是Object.getOwnPropertyNames()中返回的成员
      • 可以通过 Object.getOwnPropertySymbols() 属性访问

    • 能对该类型实例使用其他操作符

    • 不能被当作构造函数使用,作为构造函数调用时会抛出一个错误:Symbol is not a constructor「new Symbol()

    • 应用场景:

      • 给对象设置“唯一值”的属性名

        • 字符串「属性的类型为字符串」
        • Symbol类型「属性的类型也可为Symbol类型」:用变量存储 symbol 的值,然后使用存储的值创建对象属性
        • Map新的数据结构:可以允许属性名是对象「Map属性名是字符串/对象」
        • Symbol.asyncIterator/iterator「for...of..」/hasInstance「instanceOf」/toPrimitive/toStringTag... 是某些JS知识底层实现的机制
      • 在派发行为标识统一进行管理的时候,可以基于symbol类型的值,保证行为标识的唯一性

  • BigInt类型:表示任意精度的整数;

    • BigInt([value]) / [value]n

    • 通过在整数末尾附加字母 n 或调用构造函数来创建的

    • 可以安全地存储和操作大整数,甚至可以超过数字类型的安全整数限制「四则运算都支持」

    • 不能与数字相互运算;需要把数字转换为BigInt类型,在进行运算

    • 最大安全数:Number.MAX_SAFE_INTEGER9007199254740991

    • 最小安全数:Number.MIN_SAFE_INTEGER -9007199254740991

    • 超过安全数后,进行运算或者访问,结果会不准确!!!解决方案:

      • 服务器返回给客户端的大数,按照“字符串”格式返回!
      • 客户端把其变为 BigInt ,然后按照BigInt进行运算
      • 最后把运算后的BigInt转换为字符串,在传递给服务器即可
对象类型(一组属性的集合)「引用数据类型」

对象(object 是指内存中的可以被标识符引用的一块区域

  • 标准普通对象

  • 标准特殊对象

  • 非标准特殊对象

  • 可调用/执行对象「函数」

    • 普通函数
    • 构造函数
    • 箭头函数
    • 生成器函数
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值