JavaScript中基本类型和引用类型的值

JavaScript中包含两种数据类型的值:基本类型和引用类型

定义

  • 基本类型:简单的数据段
  • 引用类型:可能由多个值构成的对象

访问方式

  • 基本类型:按值访问,因为可以操作保存在变量中实际的值
  • 引用类型:引用类型的值是保存在内存中的对象,JavaScript不允许直接访问内存中的位置,所以在操作对象时是在操作对象的引用而不是实际的对象,故是按引用访问的.

动态属性

可以为引用类型动态地添加属性,但是基本类型不可以,虽然不会出错,但不会为其添加上属性.

let obj = new Object();
obj.name = "tom";
let name = 'person';
person.age = 12;
alert(obj.name); //tom
alert(name.age); // undefined

复制变量的值

基本类型复制:
会在变量对象上创建一个新值,然后把该值复制到为新变量分配的位置上,复制完成后num1和num2完全独立,各自的任何操作都不会影响对方

let num1 = 5;
let num2 = num1;
num2 ++;
alert(num1);//5
alert(num2);//6

引用类型复制
当从一个变量到另一个变量复制引用类型的值时,也会将存储在变量对象中的值复制一份放到新变量分配的位置上,但是这个值的副本是一个指针,复制结束后,两个指针指向存储在堆中的同一个对象,因此一个的操作会直接影响另一个.

let obj1 = new Object();
let obj2 = obj1;
obj1.name = 'tom';
alert(obj2.name);//tom

传递参数

ECMAScript中所有函数的参数都是按值传递.即使引用类型是按引用访问,但在参数传递时依然是按值传递.
可以把函数的参数想象成局部变量.

检测类型

typeof:确定一个变量是字符串,数值,布尔值,还是undefined.但如果测一个引用类型或者NULL我们只会得到object,为了确定一个引用类型到底是哪种引用类型,我们会用instanceof

let a = 'haha';
let b = new Object();
let c = null;
let d = [1,2];
alert(typeof a);//string
alert(typeof c);//object
alert(b instanceof Object); //true
alert(d instanceof Array); //true

存储位置

基本类型值在内存中占据固定大小的空间,因此被保存在栈内存中.
引用类型的值是对象保存在堆内存中.

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容