最近平台接结构,通过版本号+机构号判断跳转相应的页面,于是乎踩坑了…..
一番搜索后发现,强制装换string类型用 ‘===’ 比对会返回false:
1. ”== “ && “===”:
Var a=”abc”;
Var b=”abc”;
Var c=new String(“abc”);
Var d=new String(“abc”);
(1) a === b => true,没有创建实列对象,应该是指向默认创建的对象,只要值相同都会指向同样对象
(2)a === c => false,c创建了一个新的对象,并指向这个对象,用”===”对比结果为false(同理,a,b与d用”===”都为false)
(3)c === d => false,原因与2相同,c,d两个引用指向的对象不是同一个,都是两个新建的
2. 双等号 ==:
(1)如果两个值类型相同,再进行三个等号(===)的比较
(2)如果两个值类型不同,也有可能相等,需根据以下规则进行类型转换在比较:
1)如果一个是null,一个是undefined,那么相等
2)如果一个是字符串,一个是数值,把字符串转换成数值之后再进行比较
3. 三等号 ===:
(1)如果类型不同,就一定不相等
(2)如果两个都是数值,并且是同一个值,那么相等;如果其中至少一个是NaN,那么不相等。(判断一个值是否是NaN,只能使用isNaN( )
来判断)(3)如果两个都是字符串,每个位置的字符都一样,那么相等,否则不相等。
(4)如果两个值都是true,或是false,那么相等
(5)如果两个值都引用同一个对象或是函数,那么相等,否则不相等
(6)如果两个值都是null,或是undefined,那么相等
解决方案:Bignumber.js
github: https://github.com/MikeMcl/bignumber.js/
api: https://mikemcl.github.io/bignumber.js/
1. npm i bignumber.js
2. import BigNumber from 'bignumber.js'
3. 字符串比较是否相等
const a = new BigNumber('21423916781467932410578214')
const b = new BigNumber('21423916781467932410578214')
a.toString()
b.toString()
console.log(a.isEqualTo(b)) // true
— Jan 5, 2021
Made with ❤ and at Earth.