damdmen
damdmen
  • 发布:2021-06-29 21:11
  • 更新:2022-03-19 11:35
  • 阅读:1851

为什么对象变成了__ob__?

分类:uni-app

调试过程中经常遇到类似这样结构的对象

{  
	"__ob__": {  
		"dep": {  
			"id": 293,  
			"subs": {  
				"length": 0  
			}  
		},  
		"value": {  
			"__ob__": {  
				"dep": {  
					"id": 293,  
					"subs": "Object"  
				},  
				"value": {  
					"__ob__": "Object"  
				},  
				"vmCount": 0  
			}  
		},  
		"vmCount": 0  
	}  
}

比如,给getApp().GlobalData.newData赋值后,修改---->保存---->差量编译后,再获取getApp().globalData.newData就会变成类似以上的对象

还有data属性中的对象也经常会变成这个,不知道什么原因

哪位前辈能解释下,什么原因导致出现这个问题?

2021-06-29 21:11 负责人:无 分享
已邀请:
damdmen

damdmen (作者) - 社交app创业中,求靠谱合伙人

更新:自己暂时按照这里的方法解决了
https://stackoverflow.com/questions/52873516/vue-js-returns-ob-observer-data-instead-of-my-array-of-objects

在打印res前加一句

let obj2 = Object.assign([], res)
console.log(obj2)

damdmen

damdmen (作者) - 社交app创业中,求靠谱合伙人

更新2:

还是有问题,使用let obj2 = Object.assign([], res) 后,可以正常打印出 获取到的数据
let obj2 = Object.assign([], res)
console.log(obj2) //能够打印出正确的数据

但想要继续把数据打印到页面上问题就又出现了
let obj2 = Object.assign([], res)
console.log(obj2) //打印出的是__ob__对象
this.datalist = obj2

ps:数据源为 https://testnet.binance.vision/api/v3/ticker/24hr

管理员能否测试一下?好像只要获取的数据量稍大一点,vue就会出现这个问题

1***@qq.com

1***@qq.com

请问博主解决了吗,我是在多次push进数组后会出现,这个数据还有很多重复,但是我取用好像只能取第一层?

y***@163.com

y***@163.com

console 数组,对象都会这样,相当不方便啊 没有解决办法吗?

r***@126.com

r***@126.com

可以用内置浏览器调试,进入浏览器的console,这时候那些_ob_的对象都是可以点进去看真实值的。
这主要是因为要做响应式的风格,你的数据都被Observer包装过了。在Chrome内核的内置浏览器的console里面,会自动为你调用相应的Observer为你求值的。

该问题目前已经被锁定, 无法添加新回复