js的基本数据类型和引用数据类型( 二 )

如果 person是按引用传递的,那么 person 就会自动被修改为指向其 name 属性值 为"Greg"的新对象 。

  • 4.类型检测
instanceof 根据它的原型链来识别引用类型 。
person instanceof Object
所有引用类型的值都是 Object 的实例 。因此,在检测一个引用类型值和 Object 构造 函数时,instanceof 操作符始终会返回 true 。当然,如果使用 instanceof 操作符检测基本类型的 值,则该操作符始终会返回 false,因为基本类型不是对象 。
引用类型嵌套
看到这里,知道引用数据类型赋值是引用地址,对象值是存放在堆中的 。现在,在对象中A中嵌套对象B,那么A对象内存堆中存放的是A对象内存?还是A内存的引用尼?是如何赋值的?
var obj = { arr:[1,2,3]}var obj1 = obj; //复制obj的引用地址var arr = obj.arr //复制obj中arr的引用地址var arr1 = obj1.arr // 复制arr中引用地址arr1[0] = [1] console.log(arr) //[[1],1,2,3] console.log(arr1 === obj.arr) //true //地址还是相同obj.arr = [4,5,6] //突然改变obj中arr,指向新对象,obj中arr的引用也随之改变console.log(arr) //[[1],1,2,3] //而此时arr、arr1的引用还没有改变console.log(obj1.arr === obj.arr) //true //obj的引用没有改变console.log(obj1.arr === arr) //false
js的基本数据类型和引用数据类型

文章插图
 
从上面的例子可以看出,object1中储存的是arr的引用地址,与arr、arr1拥有同一个引用地址 。将obj1的arr重新赋值新的对象后,obj1中的引用地址会重新分配,obj里的arr也跟随改变 。假如,object中存放的是arr的内存,那么obj1中arr重新指向新对象时,obj中的arr将会之断开联系,像arr1一样,显然不是 。
js的基本数据类型和引用数据类型

文章插图
 




推荐阅读