【JavaScript】01.数据类型 | 8月更文挑战

129 阅读3分钟

数据类型

本文主要介绍JavaScript中的数据类型


01. 数据类型

  • 整体上可分为原始类型和引用类型

    • 原始类型(或者说基本数据类型)包括7种数据类型:NumberStringBooleanSymbolBigIntNullUndefined
    • 引用类型就是:Object
  • 原始类型和引用类型的区别是什么?

    • 大体上来说,原始类型的数据保存在栈内存中

    • 而引用类型的数据保存在堆内存中,同时会在栈中存储一个指针(地址),这个指针指向堆内存中的数据

    这里对于堆栈不展开讲

(1)Number类型

  • Number类型使用IEEE 754格式来表示整数和浮点数

    • 所以在进行浮点数的计算时,会有精度误差
  • 表示数字:

    • 十进制数,直接写:num = 10
    • 八进制,第一个数字必须为0num = 0123
    • 十六进制,添加前缀0xnum = 0x1f
    • 浮点数,必须包含小数点,且小数点后有数字:num = 1.2
    • 科学记数法,在数值后跟一个字母e,然后加上一个要乘的10的幂:max = 3e10min = 3.1e-10
  • 特别的:

    • JS中最大值用Number.MAX_VALUE表示,最小值用Number.MIN_VALUE表示

    • 如果超出这个范围,会被转换为Infinity-Infinity

    • 一个特殊值,用来表示不是一个数值:NaN——Not a Number

      • NaN不等于任何值,包括它自身
      • 可以用isNaN()方法来判断一个数值是否是NaN
    • 0有两种表示方法:+0-0

     console.log(+0 === -0) // true
     console.log(1 / +0) // +Infinity
     console.log(1 / -0) // -Infinity
     console.log(0 / 0) // NaN
     console.log(NaN == NaN) // false
     console.log(isNaN(NaN)) // true
     ​
    

(2)String类型

  • String类型可以用双引号""、单引号''、反引号``表示

     let str1 = "a string"
     let str2 = 'a new string'
     let str3 = `a string too`
     ​
    
  • 字符串不可变,一旦被创建就不能被修改,所有对字符串的修改都会销毁原字符串,并返回一个新字符串

(3)Boolean类型

  • 布尔类型是一个逻辑实体,只有两个值:true | false

(4)Symbol类型

  • Symbol类型(符号类型)可以用来表示一个唯一、不可修改的值

    • 可以用于确保对象属性使用唯一标识符,不会发生属性冲突
    • Symbol不可被枚举,只能通过 Object.getOwnPropertySymbols()
  • 用法:(用一个变量存储Symbol值,然后使用该变量,通常用作对象中的键)

    • 使用Symbol()函数进行初始化
     const foo = Symbol(); // 因为不可变,可以直接使用 const 定义变量
     const bar = Symbol();
     console.log(foo == bar) // false ,每个Symbol都是唯一的值
     ​
     let obj = {}
     obj[foo] = 1
     obj[bar] = 2
     console.log(obj) // {Symbol(): 1, Symbol(): 2}
     ​
     // Symbol不可被枚举,只能通过 Object.getOwnPropertySymbols()
     Object.keys(obj) // []
     Object.values(obj) // []
     Object.getOwnPropertyNames(obj) // []
    

(5)BigInt类型

  • BigInt类型可以表示任意大的整数,它可以超过数字的安全整数限制

  • 在数值后面加上一个n,或者通过BigInt()函数

    • 对 BigInt 的所有操作,返回的结果也是 BigInt
    • 但不能混合使用BigInt类型和Number类型
     let num1 = 123456789n
     let num2 = BigInt(123456789)
     console.log(num1 == num2) // true
    

(6)Null类型

  • Null类型只有一个值null,表示一个空对象指针

(7)Undefined类型

  • Undefined类型只有一个值undefined,表示未被赋值(初始化)的变量

    • 变量定义了未赋值,默认为undefined,但不用显式的赋值为undefined
    • 函数没有返回值,默认返回undefined

(8)Object类型

  • Object类型就是一组键值对的集合

    • 键(key):或者说属性名,是一个字符串,或者Symbol
    • 值(value):或者说属性值,可以是任意类型的值
     let obj1 = {
         name: 'Ruovan',
         age: 24
     }
     ​
     let obj2 = new Object({
         name: 'Ruovan',
         age: 24
     })
    

本人前端小菜鸡,如有不对请谅解