网站 新增线路 备案,网站建设简洁,wordpress 添加自定义字段,黄埔网站建设优化seo隐式转换规则
两端类型相同#xff0c;比较值。如果一边值为NaN#xff0c;一律返回falseundefined 和 null 只有自身与自身比较#xff0c;或者这俩互相比较时才return true两端都是原始类型[number/string/boolean] 转成数字比较只要有一端是对象类型#xff0c;把对象转…隐式转换规则
两端类型相同比较值。如果一边值为NaN一律返回falseundefined 和 null 只有自身与自身比较或者这俩互相比较时才return true两端都是原始类型[number/string/boolean] 转成数字比较只要有一端是对象类型把对象转换成原始类型后进入第1步
const isNull (o) o null
const isUndefined (o) o undefined
const _toString (o) Object.prototype.toString.call(o)
const _isNaN (o) _toString(o) [object Number] isNaN(o)
const isPrimitive (o) o ! Object(o)
const onPrimitive (obj) {if (!isPrimitive(obj)) {console.log(转换成原始值)return obj.valueOf().toString()}return obj
}
function myConvert(a, b) {if (_toString(a) _toString(b)) {// **nullnull;undefinedundefined return trueconsole.log(----1两端类型相同比较值。-----)return a b}if (_isNaN(a) || _isNaN(b)) {console.log(---0-如果一边值为NaN一律返回false。-----)return false}// ---------------处理 null undefined------------------------------if (isNull(a) || isUndefined(a)) {if (!(isNull(b) || isUndefined(b))) return falseconsole.log(-2-undefined 和 null 只有自身与自身比较或者这俩互相比较时才return true-)return true}if (isNull(b) || isUndefined(b)) {if (!(isNull(a) || isUndefined(a))) return falseconsole.log(-2-undefined 和 null 只有自身与自身比较或者这俩互相比较时才return true-)return true}// ---------------------------------------------if (isPrimitive(a) isPrimitive(b)) {console.log(---3两端都是原始类型 转成数字比较--number,string,boolean---)if (_toString(a) ! [object Number]) {a Number(a)}if (_toString(b) ! [object Number]) {b Number(b)}return a b} else {console.log(---4 只要有一端是对象类型把对象转换成原始类型后进入第1步-----)return myConvert(onPrimitive(a), onPrimitive(b))}return true
}
测试
function test(a, b) {console.log([${a}${b} ])console.log(myConvert(a, b))console.log(--------------)console.log(a b)console.log()
}// test(1, 1)
// test(undefined, null)
// test(null, undefined)
// test(null, null)
// test(undefined, null)
// test(1, null)
// test(0, {})
// test({}, {})