js的基本数据类型和引用数据类型有什么区别
参考红宝书的答案:
一.保存方式不同
访问变量有按值访问和按引用访问
基本数据类型是按值访问的,可以直接操作保存在变量里的实际值
引用类型的不允许直接访问内存中的位置,即不能直接操作对象的内存空间,
实际上是在操作对象的引用而不是实际的对象,引用类型的值是按引用访问的
不能给基本类型值添加属性或方法,可以给引用类型值添加属性和方法
二.复制变量值方式不同
若从一个变量向另外一个变量复制基本类型的值,会在变量对象上创建一个新值,然后把该值复制到为新变量分配的位置上
即两个变量复制的值会完全独立的,另开辟了一个空间来存值。
若从一个变量向另外一个变量复制引用类型的值,同样会将存储在变量对象中的值复制一份放到为新变量分配的空间里面,但是不同的是,这个复制的值实际上是一个指针,这个指针指向存储在堆中的对象,即两个变量实际上将引用同一个对象,改变其中一个变量,就会影响另一个变量。
三.传递参数的不同
js中所有函数的参数都是按值传递的(无论是引用类型还是基本类型)
若传递的参数是基本数据类型,只是值传递,函数里面的局部变量和外部的变量只是值相同,其他并没有关系
相当于基本数据类型复制的那种方式。
若传递的参数是引用数据类型,比如是对象,也是按值传递的,
但是注意:变量是按值传递的,但是函数参数obj也会按引用来访问同一个对象
注意:函数的形参有局部变量这一说,别忘了,局部变量在函数执行完之后就销毁了。