Javascript -在对象赋值时不替换对象属性

Javascript - not replace object properties in assignment of objects

本文关键字:对象 替换 属性 赋值 Javascript      更新时间:2023-09-26

在javascript中分配对象时,我们如何确定分配对象中已经存在的属性没有被替换。例如:

var foo = {
   property1: "a",
   property3: "d"
}
var bar = {
   property1 : "b",
   property2 : "c"
}
然后

a = b

foo中的property1替换为b。在我考虑的上下文中,我们不确定foo的属性1在赋值发生时是否存在。因此,在分配选项时,要检查property1是否存在,如果不存在,则从b中分配property1。所以简单的a=b赋值不是一个选项。那么有没有一种方法来分配一个对象,它只会附加那些不存在于被分配对象的属性,而不替换已经存在的。

我想一种方法是:

for(var prop in b){
   if(!(a[prop])){
      a[prop] = b[prop]; 
   }
}

有更好的速记方式吗?

听起来你想要jQuery之类的东西。扩展:http://api.jquery.com/jquery.extend/。

但假设你不想使用jQuery,这里有一个原生JS实现示例,支持嵌套(深度)对象(http://jsfiddle.net/DqgYQ/):

)
function extend(target, src, deep){
    if(typeof target !== 'object' || typeof target === 'undefined' || target === null) return target;
    for(var prop in src){
        var value = target[prop];
        var copy = src[prop];
        if(deep && typeof copy === 'object'){
            value = typeof value === 'undefined' ? {} : value;
            target[prop] = extend(value, copy, deep);
        }
        else{
            target[prop] = copy;
        }
    }
    return target;
};