数值:转换后还是原来的值。
字符串:如果可以被解析为数值,则转换为相应的数值,否则得到NaN。空字符串转为0
布尔值:true转成1,false转成0。
undefined:转成NaN。
null:转成0。
hbuilder之前版本是2.9.3,后面升级为3.0.5之后开始出现大量报错,比如Not found -1,8 at view.umd.min.js:1
In order to be iterable, non-array objects must have a Symbol.iterator method.
之类的
我估计是升级hbuilder之后加强了类型检查。
比如In order to be iterable, non-array objects must have a Symbol.iterator method.
这条,在for循环的时候不先判断数组是否为空就不行,for循环中假如有person['name']这样的也会报错,假如在data中事先定义了person:{name:''},写成person.name就不会报错
Not found -1,8 at view.umd.min.js:1这种奇怪的报错就是因为版本升级后造成的,
我把版本降级之后重新运行就没有问题
因为项目之中使用了sl-filter和kpsImageCutter两个组件,这两个组件在2020年1月就没有再更新了,本身就存在对象下的属性没有声明,直接通过person['name']这种方式赋值的情况。
大家没事儿别升级hbuilder,uniui也不会更新啥的
业务假如复杂的话还是尽量不要使用hbuilder
再也不想用uniapp和hbuilder了,好多坑莫名其妙的
假如还不行的话,加强空值检测,不要直接用空数组foreach之类的
如果是使用了 JQ EXTJS 的话本身就有 对象克隆的 函数库可以使用 如 extjs 使用
ext.ux.util.clone()
没有用这些的话 可以自己写一个 克隆函数 网上有资源 比如
function deepClone(obj){ var result={},oClass=isClass(obj)// if(oClass==="Object"){
// result={}
// }else if(oClass==="Array"){
// result=[]
// }else{
// return obj
// }
for(key in obj){
var copy=obj[key]
if(isClass(copy)=="Object"){
result[key]=arguments.callee(copy)
}else if(isClass(copy)=="Array"){
result[key]=arguments.callee(copy)
}else{
result[key]=obj[key]
}
}
return result
}
function isClass(o){
if(o===null) return "Null"
if(o===undefined) return "Undefined"
return Object.prototype.toString.call(o).slice(8,-1)
}
或者参考 extjs 的方法
function(o) {if(!o || 'object' !== typeof o) { return o }
if('function' === typeof o.clone) { return o.clone() }
var c = '[object array]' === object.prototype.tostring.call(o) ? [] : {}
var p, v
for(p in o) {
if(o.hasownproperty(p)) { v = o[p]
if(v && 'object' === typeof v) {
c[p] = ext.ux.util.clone(v)
} else {
c[p] = v
}
}
}
return c}