JS(5)数据类型【简单数据类型(详)and复杂数据类型】

104 阅读4分钟

数据类型分类

JS 中的数据类型可分为两类:简单数据类型(原始数据类型)(7种) and 复杂数据类型(引用数据类型)(1种)

简单数据类型(原始数据类型)

  • number
  • string
  • boolean
  • undefined
  • null
  • symbol (ES6新增)
  • bigint (ES6新增)

原始数据类型(简单)  存储在中,占据空间小、大小固定、会被频繁使用。

1 . number 类型

(1) 十六进制是以 0 开头的

(2) 科学计数法: xxx e/E x

例: 3.12e7 就是 3.12 * 10 的 7 次方

(3) 值的范围

ES 可以表示的最大值保存在 Number.MAX_VALUE中,最小值保存在Number.MIN_VALUE 中,超过这两个范围,就会被自动转化成一个特殊的值 Infinity 或者 - Infinity ,无穷大、无穷小的意思,这两个值不能参与任何运算!!!

(4) NaN (numbe类型的一种)

用来表示不是数值,指的是本来要返回的数值操作失败了,不是报错!!

例:

  • 0 / 0 ------> NAN

  • 5 / 0 ------> Infinity

注意

  • 涉及 NaN 的操作始终返回 NaN

  • NaN 不与包括 NaN 在内的任何值相等!!!

  • NaN的数据类型判断(isNaN vs Number.isNaN)

-   isNaN直译为“是不是 NaN”,但是其本意不是,`isNaN本意`是通过Number方法把参数转换成数字类型,
如若转换成功,则返回false,反之返回true,**它只是判断参数是否能转成数字,不能用来判断是否严格等于NaN。**
如果要判断某个值是否严格等于NaN不能用这个方法。
-   ES6提供了Number.isNaN()方法用来判断一个值是否`严格等于`NaN,它会首先判断传入的值是否为数字类型,
如不是,直接返回falseconsole.log(isNaN('aaa')); // true 
console.log(Number.isNaN('aaa')) // false

(5) 数值转换

  • 字符串转数值

        - Number( str )  
        - parseInt( str , x)
        // 其中 x 表示的是要将该字符串按 x进制的形式进行转换!!parseFloat() 只能转换 10进制
    

(6) 不区分整数和浮点数,只有 number一种类型!!!

2. string 类型

ES 中的字符串可以以 单引号 、双引号、反引号引用,没有区别。

(1) 字符字面量

\t 制表 \n 换行

(2) 字符串是不可改变的,要修改,需要先销毁原先的字符串

(3) 类型转换为字符串 toString() 或者 String()

  - 如果是数值进行调用 ,toString() 方法可以接收一个参数  x ,即把该数值按照  x 进制的形式进行转换!!!
  - String( null )      ------->   "null"
  - String( undefined )      --------->  "undefined"

(4) 模板字符串 (反引号引用的)

  • 可以定义换行的字符串

  • 可以进行插值 ${}

3. undefined

undefined 是一个假值!!!

  • 对于未声明声明了但没有赋值进行初始化的,用typeof都会返回 undefined

4. null

  • 一般是我们给某个变量赋值为 null !!!
  • null 和 undefined表面上是相等的,即 null == undefined 始终返回 true!!!

5. symbol (创建唯一记号,解决命名冲突问题)

let a = Symbol("foo")   let b = Symbol("foo")
a == b  // false
  • 如果要共享和重用 Symbol 实例 ,可以用 Symbol.for() 方法,例如 Symbol.for("a") 会先检查全局有没有用字符串"a" 注册的符号,有就用它,没有就新建一个。
  • 可以用来做属性名(有效避免命名冲突)!!
// 创建一个`Symbol` const a = Symbol()
// 创建一个对象 const obj = {} 
// 通过`obj[]`将`Symbol`作为对象的键 obj[a] = 'hello world'

6. bigint

bigInt是一种 number 类型的数据,它可以表示任意精度格式的整数,使用它可以安全地存储和操作大整数!!即使该数已经超出了 number 能够表示的安全整数范围!!!

复杂数据类型(引用数据类型)

  • object

引用数据类型(复杂)  存储在中,占据空间大,大小不固定。如果存储在栈中,会影响程序运行的性能!!!引用数据类型在栈中存储了指针,该指针指向堆中该实体的起始地址。  当解释器寻找引用值时,会先检索其在栈中的地址,取得地址后从堆中获得实体!!!

(补)堆栈区别

  • 栈区内存由编译器自动分配释放,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。
  • 堆区内存一般由开发者分配释放,若开发者不释放,程序结束时可能由垃圾回收机制回收。