【JS学习笔记】JS值类型和引用类型

刷力扣的时候因为这个知识点不清楚而被卡了一个钟。。。
题解思路(C++实现)和我自己写的解法(JS实现)是一模一样的,但却一直A不出来,发现是这里出了问题,所以特做笔记记录一下。

参考链接

js基本类型与引用类型

红宝书第四章

笔记

红宝书第四章:

ECMAScript 变量可以包含两种不同类型的数据:原始值和引用值。原始值(primitive value)就是 最简单的数据,引用值(reference value)则是由多个值构成的对象。

在把一个值赋给变量时,JavaScript 引擎必须确定这个值是原始值还是引用值。上一章讨论了 6 种 原始值:Undefined、Null、Boolean、Number、String 和 Symbol。

保存原始值的变量是按值(by value)访问的,因为我们操作的就是存储在变量中的实际值。

引用值是保存在内存中的对象。与其他语言不同,JavaScript 不允许直接访问内存位置,因此也就不能直接操作对象所在的内存空间

操作对象时,实际上操作的是对该对象的引用(reference)而非实际的对象本身。为此,保存引用值的变量是按引用(by reference)访问的。


最大的区别就是值类型的数据是之间通过值去访问的,引用类型的数据是通过引用去访问的。

形象一点说就是,值类型的数据在内存中有自己的房子,外人只能在窗外看房子内的布局是什么样的,记下来回去自己房子内捣鼓,不会影响到值类型的数据的房子。

而引用类型则十分热情大方,大门敞开,谁都可以把这里当自己家,也就意味着,任何一个住户动了房子内的东西,所有住在房子里的住户都会收到影响

const arr1 = ['a', 'b', 'c'];
const arr2 = ['d', 'e', 'f'];
console.log(arr1); // ['a', 'b', 'c']
arr1.push(arr2);
console.log(arr1); // ['a', 'b', 'c', ['d', 'e', 'f']]
arr2.pop();
console.log(arr1); // ['a', 'b', 'c', ['d', 'e']]

const arr3 = ['a', 'b', 'c'];
const arr4 = ['d', 'e', 'f'];
console.log(arr3); // ['a', 'b', 'c']
arr3.push([...arr4]); // 也可以换成 arr3.push(arr4.slice());
console.log(arr3);  // ['a', 'b', 'c', ['d', 'e', 'f']]
arr4.pop();
console.log(arr3);  // ['a', 'b', 'c', ['d', 'e', 'f']]

const person1 = `{}`;
const person2 = `{}`;
console.log(person1 === person2);  //true
const person3 = {};
const person4 = {};
console.log(person3 === person4);  //false
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值