G

Guyal

V1

2022/04/13阅读:13主题:橙蓝风

数据类型

JavaScript 数据类型

?JavaScript 数据类型和数据结构

数据类型

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是指内存中的可以被标识符引用的一块区域

  • 标准普通对象
  • 标准特殊对象
  • 非标准特殊对象
  • 可调用/执行对象「函数」
    • 普通函数
    • 构造函数
    • 箭头函数
    • 生成器函数

分类:

前端

标签:

JavaScript

作者介绍

G
Guyal
V1