javaScript中基本数据类型和引用数据类型的区别

1、文章简介:

本文会梳理基本数据类型和引用数据类型原理和区别,相信你会有收获。

2、数据类型

基本数据类型有 undefined、Null、Number、String、Boolean、symbol
引用数据类型有 Array、Function、Object

3、基础数据类型

基础数据类型的特点:
1、基本数据类型的值是不可变的,任何方法都无法改变一个基本数据类型的值

	var age = 'You'
	age[0] = 'M'
	console.log(age) //You

发现了吗,我们通过下标是无法改变字符串age的值的
下面是另一个例子:

2、基本数据类型不可以添加属性和方法

var  meili= 'xiaoming'
meili.age = 100
meili.method = function(){...}
console.log(meili.age) //undefined
console.log(meili.method)  //undefined 

3.基本数据类型的比较是值的比较

//只有在值相等的时候才会相等 
var  a = 1 
var  b = 1
console.log(a === b)  //true

例二
var a = 'csdn';
var b = 'csdn1';
console.log(a === b);  //false

4、基本类型的值被保存在栈内存中,在内存中占据固定大小的空间
下面是一些基础类型变量

var a = 10 
var b = 'csdn'
var c = 'csdn1'
栈内存
a10
bcsdn
ccsdn1

栈内存包含了变量的标识符和变量的值

4、引用数据类型

js除了上面的基础类型就是引用类型
包括 Array,Date,Function,Object 也就是说是对象了,
1、对象是属性和方法的集合,那么就是说引用类型也同样拥有

var person = {};//创建个控对象 --引用类型
person.name = 'jozo';
person.age = 22;
person.sayName = function(){console.log(person.name);} 
person.sayName();// 'jozo'
 
delete person.name; //删除person对象的name属性
person.sayName(); // undefined

上面这段代码说明引用类型拥有属性和方法 同时可以动态改变

2.引用类型的地址保存在栈中,值保存在堆中

js中引用类型不能直接操作对象的内存空间,实际上是操作对象的引用。引用类型的值是按引用访问的。引用类型的储存需要内存的栈区和堆区共同完成。
引用类型的值大小不固定,栈内存中存放地址,堆内存中存放对象,地址指向堆内存中的对象。引用地址的大小是固定的,所以栈区内存保存地址。这样,当查询引用类型时,先从栈中读取内存地址,然后再通过地址找到堆中的值,对于这种我们称为引用访问。

在这里插入图片描述
3.引用类型的比较是引用的比较

var son1 = '{}';
var son2 = '{}';
console.log(son1 == son2); // true

这是两个基本类型字符串的比较,也就是上面总结的值的比较 所以为true,再往下看

var person1 = {};
var person2 = {};
console.log(person1 == person2); // false

这里就是两个对象作比较了 为什么为false呢,引用访问时是按照引用地址访问的,也就是我们对比的是引用地址,如图两个地址是不相等的所以返回为false
在这里插入图片描述

以上叙述了基本类型和引用类型的区别
ps > 为什么会有栈内存和堆内存之分?

通常与垃圾回收机制有关。为了使程序运行时占用的内存最 当一个方法执行时,每个方法都会建立自己的内存栈,在这个方法内定义的变量将会逐个放入这块栈内存里,随着方法的执行结束,这个方法的内存栈也将自然销毁了。因此,所有在方法中定义的变量都是放在栈内存中的;
当我们在程序中创建一个对象时,这个对象将被保存到运行时数据区中,以便反复利用(因为对象的创建成本通常较大),这个运行时数据区就是堆内存。堆内存中的对象不会随方法的结束而销毁,即使方法结束后,这个对象还可能被另一个引用变量所引用(方法的参数传递时很常见),则这个对象依然不会被销毁,只有当一个对象没有任何引用变量引用它时,系统的垃圾回收机制才会在核实的时候回收它。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值