巳菽
巳菽
  • 发布:2021-10-22 17:07
  • 更新:2021-11-30 12:05
  • 阅读:316

【报Bug】json对象操作时键名带有 '.' 时编译结果有误

分类:uni-app

产品分类: uniapp/小程序/微信

PC开发环境操作系统: Windows

PC开发环境操作系统版本号: windows10

HBuilderX类型: 正式

HBuilderX版本号: 3.0.5

第三方开发者工具版本号: 1.05.2110110

基础库版本号: 2.16.1

项目创建方式: HBuilderX

示例代码:

uniapp使用的是vue写法,直接赋值

let a = {};  
let b = 'c.d.e';  
a[b]='result';  
this.a = a;

微信小程序原生代码如下

let a = {};  
let b = 'c.d.e';  
a[b]='result';  
this.setData({  
  a: a  
})  

操作步骤:

把上面的示例代码放到对应编译器中执行即可

预期结果:

编译后的代码运行结果与小程序原生代码运行结果一致

实际结果:

编译后的代码运行结果有偏差,高版本编译器可能会导致小程序直接扑街

bug描述:

如题,操作对象时如果键名中带有 '.' 点号时,使用HbuilderX打包uniapp项目到小程序,编译结果与表现不符合预期。
在一个键名有2个 '.' 号的情况时,高版本HbuilderX编译运行后的结果会引起赋值上的报错【有可能导致开发工具或者真机内存溢出直接卡死】
因报错仅发生在赋值这一步骤,怀疑是编译器针对 setData 方法实现的兼容方案有缺漏之处
导致了 xxx['a.b.c.d']='result' 这种操作被解析成 xxx.a.b.c.d='result' 【'a.b.c.d'为字符串类型值】
此处仅为个人猜测,具体还待各位大哥小姐姐们排查
附上预期结果与实际结果截图

2021-10-22 17:07 负责人:无 分享
已邀请:
巳菽

巳菽 (作者)

官方人员请确认一下是否是bug呗。

DCloud_UNI_GSQ

DCloud_UNI_GSQ

收到,感谢反馈。

“.” 在小程序环境的 setData 中有特殊含义,目前还需要避免使用。

  • 巳菽 (作者)

    如文件以及截图所示,在小程序环境下的 "." 是正常执行的。因为是编译器底层的缺陷,这一块还需要你们定位修复哈。如有修正有劳也回我一声。辛苦各位

    2021-12-03 14:22

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