第 50 题:实现 (5).add(3).minus(2) 功能
Number.prototype.add = function(n) { return this.valueOf() + n; }; Number.prototype.minus = function(n) { return this.valueOf() - n; };
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(8)
让一让,我分享一个比较简便、便于维护的方法。
首先看到题干第一反应和楼上几位一样,链式操作+给Number/Object对象添加方法。
不知道是否是考虑的不周全,就仔细想想,感觉会有一些好玩的知识点在里面,就做了一些小实验。
在 Chrome 的 DevTools 里,我们可以做这个实验:
这里问题就来了——JS的经典的浮点数陷阱。
在简单地搜索之后,我在 GitHub 上搜到了一位阿里大佬的解法,然后参考了一下他的解法和楼上大佬们的解法,对我上面的答案进行了如下修正:
【大数加减:直接通过 Number 原生的安全极值来进行判断,超出则直接取安全极值】
【超级多位数的小数加减:取JS安全极值位数-2作为最高兼容小数位数】
这样就能相对比较完善地解决这个问题了~希望大家多多补充
这个方法,可以扩展到数字字符串类型和排除
NaN
值对于在
Object
上添加原型方法是不建议的,因为这个影响太大,会影响所有以Object
构造的对象扩展
也是可以的