前言
你盼世界, 我盼望你无bug。Hello 大家好!我是杜梅拉!
这篇文章是一篇踩坑文,主要是记录自己踩的坑。
微信小程序
小程序在Android上,使用V8引擎解析和渲染 JavaScript; 而在iOS上,则是使用 JavaScriptCore.
以下关于Map数据结构在微信小程序中的异同
本文不讲Map的作用,好了,往下看(#^.^#)
1.基础库2.29.2以上的版本
2.小程序控制台
如图可知,Map的keys返回的是一个迭代器,迭代器下面有一条原型链,竟然新增了一些方法,当做数组去调用。
2.29.2调试基础库 对应的 微信客户端的版本必须大于8.0.31原型链上才会有新增的方法
3.客户端->我的->设置->检查更新->就能看到你的微信版本
问题来了
1.降低基础库 选择2.28.1
往下降低了一个版本库
竟然发现原型链竟然少了一条Interator
由此可知为啥在控制台中会报错了,因为没有这条原型链,所以没有这个方法
也就是说微信版本如果是8.0.31以下是不支持使用Map中Iterator中的方法
运行浏览器端有这条原型链吗?
在谷歌控制台中
浏览器根本没有这条原型链,也就是说最新的微信前三的版本才有
因为我印象中一直都没有这个印象
再次确定,确实是微信小程序新增的。
问题来源追溯
有用户反馈说点击添加地址按钮没反应,添加不了无法下单,不经意间痛失百万订单 ̄□ ̄||
来看看添加地址中都写了啥,截取了一小段代码(#^.^#)
async function addAddress() {
const nameFial = new Map([
["user_name", "请输入收货人"],
["phone", "请输入手机号码", ],
["detail_info", "请输入详细地址", ],
["city", "请选择省市区", ],
["province", "请选择省市区", ],
["county", "请选择省市区"]
])
const warndata = nameFial.keys().find(key => !formData.value[key])
if (warndata) {
return uni.showToast({
image: `../../static/toast_fail@2x.png`,
title: nameFial.get(warndata),
})
}
解决方法
nameFial.keys() 返回值是迭代器,
我记错了,以为返回的数组,所以才用find方法
不然肯定很多同学会有疑惑,find不是数组的方法吗,为啥用在迭代器身上,是我记错了以为keys返回的是数组
才导致问题产生
该死的啊,微信小程序偷偷加了一条原型链,本来是利于开发者的,误打误撞了冲进这条原型链,以为线上没报错没问题呢w(゚Д゚)w
所以只需要改动
[...nameFial.keys()]
把迭代器转成一个真正的数组就可以啦,该死ε=ε=ε=(#>д<)ノ
最后
如果一开始知道微信小程序大于8.0.31才新增了这条原型链,也不会导致问题的产生
一开始我就纳闷了,怎么有些线上有些没问题,有些不可以
我试了试自己的发现可以,以为是手机的版本太低导致,原来是微信已经自动更新最新版本
那些微信没有自动更新最新版本,版本小于8.0.31才会遇到这个问题
感谢
感谢各位看到最后
写下此文章目的是避免大家踩坑
睡觉了各位,晚安(๑′ᴗ‵๑)I Lᵒᵛᵉᵧₒᵤ❤