整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:

javascript基本数据类型赋值和对象引用的内存

javascript基本数据类型赋值和对象引用的内存情况分析
let c={
      name: '我的对象'
    }
    let d=c;
    console.log(c, d);  // {name: "我的对象"} {name: "我的对象"}
    d.name="我是改变后的对象";
    console.log(c, d);  // {name:"我是改变后的对象"}{name:"我是改变后的对象"}
复制代码

一次输出c和b是c对象的原始值,后面我们改变了b对象下的name,第二次输出发现两个都被改变了,那为什么a也会被改变呢?

我来看看浏览器内存内部到底发生了什么!!!

打开浏览器内存,可以看到一堆内容,我们过滤掉其他无用的,只选取string类型下面的数据,发现b所修改的内存信息就显示在第二个,点击详情会看到下面红色框里面的内容。

d in system / Context @130419
c in system / Context @130419
复制代码

后面的@130419就是内存的地址,我们发现d和c的内存地址只是一样的。

基本类型的赋值

上面是对象类型的引用,当引用对象修改之后被引用对象也会被修改。那我们试试看基本类型会不会被修改!

let a="我是a";
    let b=a;
    console.log(a, b);  // 我是a 我是a
    b="我是b,我变了";
    console.log(a, b);  // 我是a 我是b,我变了
复制代码

输出结果是给b赋值了"我是b,我变了"之后,a并没有被修改。那我们看看内存发生了什么变化? 在内存页面我们再新建一个快照,结果如下:

https://www.tuicool.com/articles/bmY7Brr

值传值: 将一个变量的值拷贝一份赋给另一个变量。

如果这个变量的值修改的话不会影响到另外一个变量, 这两个变量之间没有任何联系。

<script type="text/javascript">
    var num1=500
    var num2=num1;
    num2=40;
    alert(num1); // 500;
</script>


引用传址:将一个变量的地址赋给另一个变量。

如果这个变量的值有修改的话那么另外一个变量将同时受到影响, 将一个变量的内存地址赋值给另外一个变量, 这两个变量同时指向同一个内存地址,

这两个变量是有联系的。

<script type="text/javascript">
    var arr1=[3, 5, 7, 8, 10, 11];
    var arr2=arr1;
    arr2[0]=13;
    alert(arr1); //[13, 5, 7, 8, 10, 11]
</script>

在javascript中基本数据类型的赋值操作都是赋值传值;复合数据类型的赋值都是引用传址。

C语言中,赋值运算符和赋值表达式是程序中常见的一种操作形式。它们用于将一个值赋给变量,是实现变量赋值和更新的基本手段。本文将深入介绍C语言中的赋值运算符和赋值表达式,包括常见的赋值运算符、赋值表达式的使用方法、运算规则和实际应用场景,以帮助读者更好地理解和掌握这一重要概念。

以下是我整理的关于C语言的一些入门级资料,免费分享给大家:https://m.hqyjai.net/emb_study_blue_short.html?xt=zxy