2022-04-20——原始类型与引用类型

一、原始类型与引用类型

值类型
原始类型(也称基本类型):[字符串](string)、数值(number)、布尔值(boolean)、undefined、null ;
引用类型:对象(Object)、数组(Array)、函数(Function);

两种类型的区别:
1、存储位置不同

1.1、原始数据类型直接存储在栈(stack)中简单数据段,占据空间小,大小固定,属于被频繁使用的数据,所以存储在栈中;

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

image.png
image

1、赋值

// 原始类型赋值
let str_1 = "hello"
let str_2 = str_1 //str_2:hello

str_1 = "world" //str_1:world

console.log(str_1)
console.log(str_2)

// 引用类型赋值
let stu_1 = {name:"xiaoming"}
let stu_2 = stu_1 //stu_2.name:xiaoming

stu_1.name = "xiaohong" //stu_1.name:xiaohong

console.log(stu_1.name)
console.log(stu_2.name)

2、比较

// 原始类型比较 ===
let str_1 = "hello"
let str_2 = "hello"
console.log(str_1 === str_2)
// 注:值的比较,值相同 true

// 引用类型比较
let stu_1 = {name:"xiaoming"}
let stu_2 = {name:"xiaoming"}
console.log(stu_1 === stu_2)
// 注:引用的比较,引用指向不同 false

3、函数传参

// 原始类型传参
function fun_n(num){
    num = 100
}
let n = 10
fun_n(n)
console.log(n)

// 注:传的是值,函数内部改变值,不会影响外部变量


// 引用类型传参
function fun_arr(arr){
    arr.push(10)
}
let arr = [1,2,3]
fun_arr(arr)
console.log(arr)

// 注:传的是引用,指向同一个内存地址,函数内部改变会影响外部变量

4、结论:原始类型与引用类型三种情况下的对比:

1、赋值:原始类型赋【值】;引用类型赋【引用】。
2、比较:原始类型比较的是值是否相等;引用类型比较的是【引用】是否指向同一对象。
3、函数传参:原始类型作为参数,函数内的操作不影响实参的值;引用类型作为参数,函数内的操作会影响实参的值。

你可能感兴趣的:(2022-04-20——原始类型与引用类型)