详解JS中值传递和引用传递的区别


当前第2页 返回上一页

2.png

请看下面代码:

1

2

3

4

5

6

let y = x;

 

y.push(2);

 

console.log(x); // [1, 2]

console.log(y); // [1, 2]

第一个语句let x =[1]创建一个数组,定义一个变量x,并使用对创建的数组的引用来初始化变量。

然后let y = x定义一个变量y,并使用存储在x变量中的引用来初始化y,这是一个引用传递。

y通过y.push(2)通来改变数组。因为xy变量引用相同的数组,所以这种变化会反映在两个变量中。

注意:为简单起见,我说变量包含对对象的引用。 但是严格说来,JavaScript中的变量包含的值是对对象的引用。

【推荐学习:javascript高级教程

4.值传递和引用传递的比较

在比较对象时,理解值和引用之间的区别非常重要。

当使用严格比较运算符===时,如果两个变量的值相同,则它们相等。 以下所有比较均相等

1

2

3

4

5

6

const one = 1;

const oneCopy = 1;

 

console.log(one === oneCopy); // true

console.log(one === 1);       // true

console.log(one === one);     // true

oneoneCopy具有相同的值1。当两个操作数都为1时,操作符===的计算结果都为true

但是比较运算符===在比较引用时的工作方式有所不同。 2个引用只有在引用完全相同的对象时才相等。

ar1ar2保存对不同数组实例的引用:

1

2

3

4

5

6

7

8

9

const ar1 = [1];

const ar2 = [1];

 

console.log(ar1 === ar2); // false

console.log(ar1 === [1]);  // false

 

const ar11 = ar1;

console.log(ar1 === ar11); // true

console.log(ar1 === ar1);  // true

ar1ar2引用结构相同的数组,但是ar1 === ar2的计算结果为false,因为ar1ar2引用了不同的数组对象。

仅当比较指向相同对象的引用时,比较运算符才返回truear1 === ar11ar1 === ar1

5.总结

在JavaScript中,原始类型作为值传递:意味着每次分配值时,都会创建该值的副本。

另一方面,对象(包括普通对象,数组,函数,类实例)是引用。 如果修改对象,则引用该对象的所有变量都将看到更改。

比较运算符区分比较值和参考。 仅当引用完全相同的对象时,2个保存引用的变量才相等,但是,无论值源自何处,只要变量具有相同的2个值(分别来自变量,文字等),则2个保存值的变量就相等。

原文地址:https://dmitripavlutin.com/value-vs-reference-javascript/

作者:Ahmad shaded

译文地址:https://segmentfault.com/a/1190000039761445

更多编程相关知识,请访问:编程教学!!

以上就是详解JS中值传递和引用传递的区别的详细内容,更多文章请关注木庄网络博客

返回前面的内容

相关阅读 >>

javascript怎么实现日期转换字符串

javascript中load用法是什么

浏览器缓存策略的详细介绍(图文)

你知道原生html组件是什么吗?原生html组件的介绍

javascript如何使网页跳转

web程序员必备之 关于<script>标记的一些小知识

javascript中区分大小写吗

javascript中var有啥缺陷

javascript是网页脚本语言吗

详解javascript的空值合并运算符(??)

更多相关阅读请进入《javascript》频道 >>




打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

评论

管理员已关闭评论功能...