对象JavaScript中的奇怪行为数组

时间:2013-04-05 05:50:15

标签: javascript

为什么b.first [0]返回“t”以及如何避免这种情况?

我在b.first [0]

中需要安全的“q”
var extend = function(o,p){
    for(prop in p){
        o[prop] = p[prop];
    }
    return o;
};

var a = {first:['q','w']};
var b = {};

extend(b,a);

document.write(a.first[0]); //q
document.write(b.first[0]); //q

a.first[0] = 't';

document.write(a.first[0]); // t
document.write(b.first[0]); // t ?????????????????????

1 个答案:

答案 0 :(得分:5)

这是一个与a扩展b不会重新创建数据的概念有关的问题。如果某些数据是一个对象(如数组),它只是“指向”该数组而不是创建一个新的相同数组。基本上你是存储两个指向同一个数组的指针,所以当你改变一个时,你会改变另一个。

这是一个答案,它更详细地讨论了在Javascript中“克隆”对象的想法。

https://stackoverflow.com/a/728694/1570248