以下是一段可以实现对象属性逐一比对,取有值属性的 JavaScript 代码:

```javascript
function compareObjects(obj1, obj2) {
const result = {};

for (let key in obj1) {
if (obj1.hasOwnProperty(key)) {
if (obj1[key] && typeof obj1[key] === 'object') {
result[key] = compareObjects(obj1[key], obj2[key]);
} else {
result[key] = obj1[key] || obj2[key];
}
}
}

for (let key in obj2) {
if (!result.hasOwnProperty(key) && obj2.hasOwnProperty(key)) {
if (obj2[key] && typeof obj2[key] === 'object') {
result[key] = compareObjects(obj1[key], obj2[key]);
} else {
result[key] = obj2[key];
}
}
}

return result;
}
```

其中,函数 `compareObjects` 接收两个参数,分别为需要比对的两个对象。首先,定义一个空对象 `result` 用于存储比对的结果。接下来遍历对象 `obj1`,如果当前属性值为对象或数组对象,递归比对该属性值;否则,将该属性值与相应属性在 `obj2` 对象中的属性值进行比较,取非空值。最后,再遍历对象 `obj2`,如果当前属性在结果集 `result` 中不存在,则重复上述处理。在比对完成后,返回结果集 `result`。

需要注意的是,这段代码并未对输入数据进行完整性检查,因此在使用前需要保证两个比对对象都存在且为对象类型。
展开
评论