1 问题描述
在最近的一段时间内,在学习web前端课程。课程老师讲述到js内容部分时,浅略提到,关于基本数据类型与引用类型的区别,并希望学生自己在课余时间进行了解。虽然该内容是一个基础知识,但容易混淆。
2 问题分析
Js变量有两种不同的数据类型:基本类型、引用类型。基本数据类型包括:undefined,boolean,number,string,null。引用类型包括:object、Array、RegExp、Date、Function、特殊的基本包装类型(String、Number、Boolean)以及单体内置对象(Global、Math)。
3 解决方案
区别一:操作的方式不同
基本数据类型是按值访问,可真实的去操作变量中实际的值。
引用类型,当复制操作该变量时,操作的是对象的引用;但在为对象添加属性时,操作的是实际的对象。
区别二:值是否可变
对于基本数据类型而言,使用任何方式都不能改变它的值。从下面三行代码中可以清晰的看出,经过toUpperCase(),并没有改变name的值,而是生成的新的字符串。
对于引用类型而言,值可以被改变。从下面可以看出,为Array使用push方法后,在尾部添加了一个值。也就是原本的存入的值被改变了。
区别三:是否能添加属性和方法
基本数据类型不能够为其添加属性及方法。下面的代码可以清晰的看出前面定义的age和method方法并没有起作用,当被调用时依旧为undefined。
引用类型能够为其添加属性及方法,且能够进行删除。下面的代码可以看出当person是一个引用对象时,是可以进行添加操作的,并且生效了。
区别四:变量间的比较方式不同
对于基本数据类型:==与===是有区别的:①不同类型之间(如string与number)先转化同一种类型,再进行值的比较;②===的话如果类型不同,那么直接就是false;③同类型比较,直接进行值得比较。
对于引用类型:==与===没有区别,就直接对其指针地址进行比较。
区别五:存储方式不同
定义几个基本数据类型的变量:var name = ‘jozo’;var city = ‘guangzhou’; var age = 22;它们的存储情况为:
定义几个引用类型的对象:var person1 = {name:’jozo’};var person = {name:’xiaom’};var person3 = {name:‘xiaoq’}它们的存储情况为:
4 总结
Js基本数据类型的变量存放的是基本类型数据的实际值;而引用类型的变量保存对它的引用,也就是指针。基本数据类型与引用类型是两种完全不同的数据类型。也希望这篇博客能够给入门的学者们对两者的区别有一点的帮助。