Skip to content

JS中原始类型有哪几种?null 是对象吗?原始数据类型和复杂数据类型有什么区别? #43

Open
@TieMuZhen

Description

@TieMuZhen

JS中原始类型有哪几种?

目前,JS原始类型有六种,分别为:

  • Boolean
  • String
  • Number
  • Undefined
  • Null
  • Symbol(ES6新增)

ES10新增了一种基本数据类型:BigInt

复杂数据类型只有一种: Object

null 是对象吗?

null不是一个对象,尽管typeof null输出的是object,这是一个历史遗留问题,JS 的最初版本中使用的是 32 位系统,为了性能考虑使用低位存储变量的类型信息,000 开头代表是对象,null 表示为全零,所以将它错误的判断为object

原始数据类型和复杂数据类型有什么区别?

基本数据类型和复杂数据类型的区别为:

1、内存的分配不同

  • 基本数据类型存储在栈中。
  • 复杂数据类型存储在堆中,栈中存储的变量,是指向堆中的引用地址。

2、访问机制不同

  • 基本数据类型是按值访问
  • 复杂数据类型按引用访问,JS不允许直接访问保存在堆内存中的对象,在访问一个对象时,首先得到的是这个对象在堆内存中的地址,然后再按照这个地址去获得这个对象中的值。

3、复制变量时不同(a=b)

  • 基本数据类型:a=b;是将b中保存的原始值的副本赋值给新变量a,a和b完全独立,互不影响
  • 复杂数据类型:a=b;将b保存的对象内存的引用地址赋值给了新变量a;a和b指向了同一个堆内存地址,其中一个值发生了改变,另一个也会改变。

4、参数传递的不同(实参/形参)

  • 函数传参都是按值传递(栈中的存储的内容):基本数据类型,拷贝的是值;复杂数据类型,拷贝的是引用地址

参考文章

Metadata

Metadata

Assignees

No one assigned

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions