js 赋值?值类型和引用类型

近来做的一个项目中出现了,var result = data.data//data.data 为数组,结果更改了result的值导致data的属性直接发生变化,后查阅资料发现js数组其实为引用类型。

js的赋值分类如下:
(1)值类型:数值、布尔值、null、undefined。
(2)引用类型:对象、数组、函数。

一、值类型-例子:

var b='text';
var a = b;
b = 'textb';
a = 'texta';
alert(a);  //texta
alert(b); // textb

值类型,即为直接传递数值,重新分配新的存储空间,因此a,b互不影响。

二、引用类型
请看下面知乎上的一个例子:

var a = [1,2,3];
var b = a;
a = [4,5,6];
alert(b);  //[1,2,3]


var a = [1,2,3];
var b = a;
a.pop();
alert(b);  //[1,2]

var a = [1,2,3];
var b = a;
a[0] = 111;
alert(b); //[111,2,3]

从这里我们看出,数组的赋值b=a其实是:令b指向,a所指向的“数组对象”。
a = [4,5,6],实质上是直接改变a本身引用的“数组对象”,则不会对原本指向的[1,2,3]“数组对象”产生影响,因此b也不会发生变化。
a[0] = 111或者a.pop();会影响[1,2,3]这个“数组对象”,所以会影响b。

这里写图片描述
图片作者:Intopass
链接:https://www.zhihu.com/question/26042362/answer/31903017
来源:知乎

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值