引用类型有哪些?非引用类型有哪些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);
- 第一次,会弹出false,因为这是两个本来就毫无联系或完全不同的指针引用类型数据,分别指向两个不同的栈内存空间。
- {a:1, b:2},把obj2赋值给obj1,打印obj1.
- 会弹出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.