引用类型对象拷贝

引用类型有哪些?非引用类型有哪些2.如下代码输出什么?为什么

  • 对象,数组,函数,正则
  • 数值,boolean,字符串,undefined,null
  • var obj1 = {a:1, b:2}; var obj2 = {a:1, b:2}; console.log(obj1 == obj2); console.log(obj1 = obj2); console.log(obj1 == obj2);
  1. 第一次,会弹出false,因为这是两个本来就毫无联系或完全不同的指针引用类型数据,分别指向两个不同的栈内存空间。
  2. {a:1, b:2},把obj2赋值给obj1,打印obj1.
  3. 会弹出true.因为当我门把obj2赋值给obj1后其实就暗示着两者的指针或路劲指向同样一个堆内存空间.

var a = 1 var b = 2 var c = { name: '饥人谷', age: 2 } var d = [a, b, c] var aa = a var bb = b var cc = c var dd = d a = 11 b = 22 c.name = 'hello' d[2]['age'] = 3 console.log(aa) console.log(bb) console.log(cc) console.log(dd)
1---a是基本类型,赋值给aa后,不管a如何变化.都不影响aa.
2---b是基本类型,赋值给bb后,不管b如何变化.都不影响bb.
{name: 'hello', age: 2}---c是对象,引用类型,赋值给cc,cc和c一样,指向同一个内存空间,所以c变化,cc也会跟着发生变化.
[1,2,{name: '饥人谷', age: 3}]---d是数组,引用类型,赋值给dd,dd和d一样指向同一个内存空间,所以当d中的元素对象c发生变化即d发生变化,dd也会跟着发生变化.


var a = 1 var c = { name: 'jirengu', age: 2 } function f1(n){ ++n } function f2(obj){ ++obj.age } f1(a) f2(c) f1(c.age) console.log(a) console.log(c)
1---a是基本类型,吧a当做参数执行f1,var n = a,操作n,并不会影响a的值.
{name: 'jirengu', age: 4}---c是对象,引用类型,故f2对age++,会使c中属性age的值加1,同理,f1,也会使其加1,故age的值为4.


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

推荐阅读更多精彩内容

  • 1.引用类型有哪些?非引用类型有哪些 非引用类型值,即基本类型值(数值,布尔值,undefined,null):指...
    LINPENGISTHEONE阅读 224评论 0 0
  • 1.引用类型有哪些?非引用类型有哪些2.如下代码输出什么?为什么? var obj1 = {a:1, b:2}; ...
    Rising_suns阅读 260评论 0 0
  • 一.引用类型有哪些?非引用类型有哪些引用类型有对象、数组、函数、正则表达式非引用类型:数值、布尔值、null、un...
    邵志远阅读 397评论 0 0
  • 1.引用类型有哪些?非引用类型有哪些 基本类型值(Number、Boolean、string、null和undef...
    saintkl阅读 366评论 0 0
  • 引用类型有哪些?非引用类型有哪些 基本类型值(Undefined、Null、Boolean、Number和Stri...
    jamesXiao_阅读 161评论 0 0