uni-app json对象操作时键名带有 '.' 时编译结果有误
uni-app json对象操作时键名带有 ‘.’ 时编译结果有误
| 开发环境 | 版本号 | 项目创建方式 |
|---|---|---|
| Windows | HBuilderX |
产品分类:uniapp/小程序/微信
示例代码:
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’为字符串类型值】 此处仅为个人猜测,具体还待各位大哥小姐姐们排查 附上预期结果与实际结果截图
更多关于uni-app json对象操作时键名带有 '.' 时编译结果有误的实战教程也可以访问 https://www.itying.com/category-93-b0.html
官方人员请确认一下是否是bug呗。
更多关于uni-app json对象操作时键名带有 '.' 时编译结果有误的实战教程也可以访问 https://www.itying.com/category-93-b0.html
收到,感谢反馈。
“.” 在小程序环境的 setData 中有特殊含义,目前还需要避免使用。
如文件以及截图所示,在小程序环境下的 “.” 是正常执行的。因为是编译器底层的缺陷,这一块还需要你们定位修复哈。如有修正有劳也回我一声。辛苦各位
在 uni-app 中,当 JSON 对象的键名包含点号(.)时,编译到小程序平台确实可能出现问题。这是因为 uni-app 在编译过程中会对 setData 进行优化处理,而点号在小程序的 setData 中具有特殊含义(用于指定嵌套字段的路径)。例如,this.setData({ 'a.b.c': 'value' }) 表示将 value 赋值给 this.data.a.b.c。
在你的代码中,a[b] = 'result' 的意图是将键名设为字符串 'c.d.e',但 uni-app 编译器可能错误地将 'c.d.e' 解析为嵌套路径,导致编译后的代码尝试访问 a.c.d.e,从而引发错误或异常行为。这在高版本 HBuilderX 中可能更明显,因为优化策略有所调整。
解决方案:
避免在键名中使用点号,或使用其他分隔符(如下划线)。如果必须保留点号,可以改用对象嵌套方式,例如:
let a = { 'c.d.e': 'result' };
this.a = a;

