JS中的基本类型和引用类型

JS变量可以划分为两种不同的数据类型:基本类型、引用类型。也有别的叫法,如原始类型和对象类型等。

基本类型:undefined、null、Boolean、Number、String、Symbol(ES6)

引用类型:除基本类型以外,也可以理解成对象。如Object、Array、RegExp、Date、Function等。

类型区别

image

详细说明

1. 值的可变性

// 基本类型,以string类型为例
let person = '小红'
person.age = 16
console.log(person.age) // undefined

// 引用类型
let person2 = { name: '小明' }
person2.age = 18
person2.addAge = function () { person2.age2 = person2.age + 1 }
person2.addAge()
console.log(person2.age, person2.age2) // 18 19

由上可见,引用类型值(原始值)可添加属性和方法,而基本类型值则不可以,进一步说明,基本类型的值是不可变的,而引用类型的值是可变的。

2. 存储

let name = '小红', age = 18
let person1 = ['小王'], person2 = { name: '小张' }

(1)基本类型存储结构

image

基本类型的变量存放在栈区(栈区指内存里的栈内存,stack)。

栈区保存了变量的标识符和变量的值。

(2)引用类型存储结构

image

引用类型的存储需要内存的栈区和堆区共同完成(堆区指内存里的堆内存,heap)。

栈区保存了变量的标识符和指向堆内存中该对象的指针(该对象在堆内存的地址),堆区保存了实际的对象。

3. 访问/比较

// 基本类型,以string为例
let a = '[]', b = '[]'
console.log(a == b) // true

// 引用类型
let c = [], d = []
console.log(c == d) // false

基本类型的访问是按值访问的,引用类型是按引用访问的。

基本类型比较的是值,只要它们的值相等它们就相等,所以返回true。

引用类型比较的是两个对象堆内存地址是否相同。虽然变量c和变量d看着都是一个空数组,但是它们的堆内存地址不是一样的,指向的不是同一个数组对象,所以它们不相等,返回false。

image

posted @ 2021-09-06 15:29  小虚空  阅读(735)  评论(0)    收藏  举报