🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
[TOC] ## 小数求和 问题描述: js 控制台直接输入 0.1 + 0.2 求和值,结果不等于0.3 > tips: 计算机在进行十进制的数字运算时,会将数字先转换为对应的二进制,然后对阶运算,最后再将结果转为十进制数。在转换、对阶过程中就可能产生精度丢失问题。。。 解决思路: 1.小数转为整数再进行计算,但是这不是最优解。 ~~~ function add (number1, number2) { const suffixLength1 = number1.toString().split(".")[1].length; const suffixLength2 = number2.toString().split(".")[1].length; const baseNum = Math.pow(10, Math.max(suffixLength1, suffixLength2)); return (baseNum * number1 + baseNum * number2) / baseNum; } ~~~ 2.引用第三方库,例如:[mathjs](https://github.com/josdejong/mathjs) ## 数据深拷贝 问题描述: 对象复制时,修改复制后的对象,被复制着也会被修改,这也被称为浅拷贝。 解决思路: 判断传入的对象的数据类型,数组和对象遍历其,将他们的值拷贝给新的对象并返回结果。 ~~~ function deepClone(obj) { let newObj = null; if (Array.isArray(obj)) { newObj = obj.map(item => deepClone(item)); } else if (Object.prototype.toString.call(obj) === "[object Object]") { newObj = {}; for (let key in obj) { newObj[key] = deepClone(obj[key]); } } else { newObj = obj; } return newObj; } ~~~