js对象的底层数据结构
# 一、内置类型汇总
JavaScript 目前有八种内置类型(包含 ES6 的 symbol):
基本类型
- null
- undefined
- string
- number
- boolean
引用类型
- object
- symbol
- BigInt
# 二、基本类型
数据都是直接按值存储在栈中的(Undefined、Null、不是 new 出来的布尔、数字和字符串)
每种类型的数据占用的内存空间的大小是确定的,并由系统自动分配和自动释放。
这样带来的好处就是,内存可以及时得到回收,相对于堆来说 ,更加容易管理内存空间。
# 三、引用类型
引用类型数据被存储于堆中 (如对象、数组、函数等,它们是通过拷贝和 new 出来的)。
引用类型的数据的地址指针是存储于栈中的
当我们想要访问引用类型的值的时候,需要先从栈中获得对象的地址指针,然后,在通过地址指针找到堆中的所需要的数据。
# 四、“数组”底层实现
(探究 JS V8 引擎下的“数组”底层实现)[https://juejin.cn/post/6844903943638794248#heading-8]
# 五、symbol 类型
(理解 Es6 中的 Symbol 类型)[https://www.jianshu.com/p/e36a558bec34]
# 六、undefined 与 null
undefined 和 null 在 if 语句中,都会被自动转为 false
!null // true
!undefined // true
undefined == null // true
1
2
3
2
3
根据 C 语言的传统,null 被设计成可以自动转为 0。js 里也是一样
Number(null) // 0
5 + null // 5
1
2
2
undefined是一个表示"无"的原始值,转为数值时为NaN。
Number(undefined) // NaN
undefined + 5 // NaN
1
2
3
4
2
3
4
# 总结
# null
null表示"没有对象",即该处不应该有值
常见场景:
- 作为函数的参数,表示该函数的参数不是对象。
- 对象原型链的终点为null。
# undefined
undefined表示"缺少值",就是此处应该有一个值,但是还没有定义
常见场景:
- 变量被声明了,但没有赋值时,就等于undefined。
- 对象没有赋值的属性,该属性的值为undefined。
- 调用函数时,应该提供的参数没有提供,该参数等于undefined。
- 函数没有返回值时,默认返回undefined。
上次更新: 2023/04/05, 09:41:10