js中的对象引用及其存在的问题

责编:menVScode 2017-06-16 12:26 阅读(747)

        基本类型(字符串,布尔值,数组...)的引用,赋值的时候只是值的复制,不会造成互相的影响。

var a = 3;
var b = a;
b += 7;
alert(b);//10
alert(a);//3

        对象类型引用的时候,会出现一些问题,下面代码执行结果数组c与数组d的元素是一样了,数组c受到数组d的影响了。

var c = [1,2];
var d = c;
d.push(3);
console.log(d);//[1, 2, 3]
console.log(c);//[1, 2, 3]

        原因:对象类型赋值的时候,不仅仅是值的复制,而且变量存在内存的地址也引用了。相当于数组c和数组d共用了相同的内存地址。

        

        我们再来看一种情况,代码如下;按照上面的解释,数组 e、f 的元素应该是相同,但是显然不是的。

var e = [1,2];
var f = a;
f = [1,2,3];
console.log(f);//[1, 2, 3]
console.log(e);//[1, 2]

        原因:一开始 f、a 是共同引用一个内存地址的,f 的值是[1,2];后来将 f 又重新赋值了,f 生成了一个新的内存地址,就不跟 e 共用了一个内存地址了。


        基本类型的比较,只是值与值的比较。

var m = 9;
var n = 9;
console.log(m==n);//true

        对象类型,不仅值与值的比较,而且内存地址也要进行比较,两者一样才是true。

var x = {a:1};
var y = {a:1};
console.log(x==y);//false

        如果还有些小伙伴不明白的话,建议可以看看js堆栈相关的内容。

标签: js
前端交流群: MVC前端网(menvscode.com)-qq交流群:551903636

邮箱快速注册

忘记密码