JS 直接赋值与引用式赋值

本文详细介绍了JavaScript中的值赋值与引用赋值原理,包括基本数据类型与复杂数据类型的存储区别。简单数据类型在栈中直接存储值,而复杂数据类型如对象在堆中存储,仅在栈中存储地址。在函数调用中,简单数据类型通过值传递,两者互不影响;而复杂数据类型通过地址传递,函数内部的修改会影响到原始对象。通过实例和图像辅助理解这一核心概念。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在这里插入图片描述

JS 直接赋值与引用式赋值

在JavaScript中基本(简单)数据类型都是传值赋值复杂数据类型都是引用赋值(传地址)

基本概念

  • 简单数据类型:在存储变量中存储的是值本身:string number boolean undefined null
  • 复杂数据类型:在存储时变量中存储的仅仅是地址,因此叫,通过new关键字创建的对象:Object,Array,Date等
  • 简单数据类型 是存放在里面,里面直接开辟一个空间存放的是

    => var a=b; //a与b无关

  • 复杂数据类型 首先在里面存放地址,然后这个地址指向里面的数据

    => var a=b; //a与b联动

传值赋值(值传递)

function test(i){
console.log(i)
   i = 2 // a与i 没有关系
}
var a = 1
test(a) //传入 简单数据类型 a 参数
console.log(a) // 1
  • 当传入的是简单数据类型的参数时:就是复制了区的内容给i而已,i与a之间没有关系。

引用赋值(传地址)

function test(person) {
   console.log(person)
   person.age = 26; // 导致p1地址指向的内容堆区发生改变
}

const p1 = {
   name: 'yck',
   age: 25
}

test(p1) // 传入了复杂类型(对象)的地址
console.log(p1) // {name:'yck',age:26}
  • 当传入的参数为复杂数据类型时:复制了栈区的地址给函数,函数可通过地址修改堆区数据。

图像示例

为了更形象一点,可以尝试看看以下内容

  1. 传值赋值(值传递)
    在这里插入图片描述
    在这里插入图片描述
  2. 引用赋值(传地址)
    在这里插入图片描述
    在这里插入图片描述

小结:只是小结了这方面小小的内容,还有许多更深的知识点需要补充,希望各位大佬多多指教,也希望这篇文章能帮助到你~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值