使用{__ob__: Observer}改变对象后属性值为空
时间: 2023-11-12 22:50:26 浏览: 110
__ob__: Observer 是 Vue 框架对数据设置的监控器,它是一个非可枚举属性。当你使用{__ob__: Observer}来改变对象后,可能会导致属性值为空的情况。这是因为 __ob__ 属性是 Vue 内部使用的,它不会被 JSON.stringify() 或 Object.assign() 所处理,所以在复制对象时,__ob__ 属性会被忽略。因此,当你使用{__ob__: Observer}来改变对象后,属性值会被清空。
相关问题
(5) [Array(1), Array(1), Array(1), Array(1), Array(1)] 0 : Array(1) 0 : {…} length : 1 __ob__ : Observer {value: Array(1), dep: Dep, vmCount: 0} [[Prototype]] : Array 1 : [{…}, __ob__: Observer] 2 : [{…}, __ob__: Observer] 3 : [{…}, __ob__: Observer] 4 : [{…}, __ob__: Observer] 如果他是这种结构,该怎么找到每一组的sid?
根据你提供的结构,数组的每个元素都是一个包含一个元素和一个 `Observer` 对象的数组,其中这个元素就是你需要查找的对象,它包含了 `sid` 属性。
因此,你可以使用 `forEach` 方法遍历数组,然后访问每个元素的第一个子元素,即包含 `sid` 属性的对象,如下所示:
```javascript
const arr = [ [ { sid: 1, name: 'foo' }, __ob__: Observer ], [ { sid: 2, name: 'bar' }, __ob__: Observer ], [ { sid: 3, name: 'baz' }, __ob__: Observer ], [ { sid: 4, name: 'qux' }, __ob__: Observer ], [ { sid: 5, name: 'quux' }, __ob__: Observer ] ];
arr.forEach(function(item) {
console.log(item[0].sid);
});
```
这样就可以依次输出每个元素中包含的 `sid` 属性的值了。
对象结构为{__ob__: Observer}时获取属性值
获取属性值的方法有两种:
1. 通过`.get()`方法获取属性值。在对象结构中,可以使用`__ob__.value`来获取属性值。例如,`obj.__ob__.value`可以获取到对象`obj`的属性值。
2. 通过`Object.assign()`或`JSON.parse(JSON.stringify())`方法获取属性值。在对象结构中,可以使用`Object.assign({}, obj.__ob__.value)`或`JSON.parse(JSON.stringify(obj.__ob__.value))`来获取属性值。
阅读全文