JavaScript 基本类型和引用类型区别

基本概念

JS有以下这些数据类型:undefinednullstringbooleannumbersymbolbigintobject

其中,前面 7 个被称为基本类型,又叫原始类型Primitive Type);
object,被称为引用类型Reference Type),或叫做对象类型Object Type)。

区别

基本类型在中存储,而引用类型对象部分在中存储,中存储的对象的引用地址

let str = 'hello world';
let num = 123;
let obj1 = {a: 1, b: 2};
let obj2 = obj1;
let arr = [1, 2, 3];

它们的存储如下图:

基本类型的值是不可变的,向基本类型变量赋值时,实际是赋予它一个新值,而不是改变旧值。因此原始类型这个表述可能更贴切,原始就是不可再分,无法修改的意思。

let str = 'hello wrold';
str = 'hello'; // 将'hello'赋值给str,而非将'hello world'修改成'hello'

引用类型往往由基本类型或其他对象组成,它是可变的。

修改对象的值:

let obj1 = {a: 1, b: 2};
obj1.c = 3;
console.log(obj1); // {a: 1, b: 2, c: 3}
let arr = [1, 2, 3];
arr.push(4);
console.log(arr); // [1, 2, 3, 4]

注意,这里我们说的可变不可变,都是针对的,而不是针对变量,变量是可变的。

在传参方面,基本类型是值传递,引用类型是引用传递

let str = 'hello world';
(function(str) { str = 'hello';})(str);
console.log(str); // 'hello world'

let obj = {a: 1, b: 2};
(function(obj) { obj.c = 3;})(obj);
console.log(obj ); // {a: 1, b: 2, c: 3}

在值的相等比较上,要区分是严格相等(===),还是宽松相等(==)。

对于严格相等,基本类型比较值是否相等,而引用类型比较引用地址是否相等(是否视同一个对象)。
对于宽松相等,不管是基本类型,还是引用类型,或者基本类型和引用类型比较,它们都是比较值,这中间可能伴随着类型转化。感兴趣可以看我的另一篇文章,js 类型转换保姆级讲解

对于类型检查,基本类型使用typeof,有个特例,typeof null结果为object,需要注意一下。引用类型使用instanceof

总结

对比项基本类型引用类型
存储引用存在,值存在
是否可变不可变可变
传递类型值传递引用传递
比较比较严格相等比较引用地址,宽松相等比较
类型检查typeofinstanceof
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值