打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
js避坑历险记
巨坑1:js精度问题
前段时间去一家物流公司面试,做了一个js题,印象尤为深刻:
1
2
3
4
5
var one=0.1;
var two=0.2;
var six=0.6;
var eight=0.8;
console.log([two-one==one,eight-six==two]);
当时的我是反应速度极快的,这是考数学吗,当然全true啊?回头再电脑上一试,发现是[true,false]。坑爹啊!玩我呢!
码农大人我马上速查百度,才发现js确实是有精度一说,浏览器处理不了太大的数据,范围是2的平方到52次方之间;例如16个9是和10000000000000001相等,懵逼了吧!
同时,浏览器也存在处理小数不准确的事实。这是因为计算机只识别二进制数据,而且只能显示一定的有限长度。
小数精度常见场景:购物车里物品的价格计算与显示,在不同浏览器或设备上显示价格不一样,可能就是精度的问题。
解决方案:toFixed后再Number一下就可以了。
巨坑2:js的计算问题
1
console.log("9"+-3);
第一眼觉得应该是写错了,运行应该报错嘛!但是,不对,现实很残忍!浏览器控制台显示为6。对于此,我只能呵呵,对于这两种运算,js的内部处理逻辑是不太一样的。而且不加括号也是可以运算的。要避免这种坑,除了书写规范外,咱们最好先isNaN后再Number一下,再来进行运算。
巨坑3:js的字符比较问题
1
console.log("37">"8");
脑洞还是限制了我的想象力,答案竟然是false。细查,发现js中对于字符串的比较,是按位从左到右的相同位置来做比较的。避坑指南:忍忍吧,还是先Number一下再做比较哦,字符串跟数字一定要分清楚哦!
巨坑4:js中undefined做比较的情况
1
2
3
4
console.log(undefined==true);//false
console.log(undefined==false);//false
if(!undefined)console.log(false);//输出了false
上面的是什么梗?undefined和true或false做比较都是false!没天理啊,为啥?码农大人我也不知道,姑且死记硬背吧,注意undefined作为条件来判断是false。
以上的坑,你们都碰到过么?嘻嘻,如果你还碰到其他的坑,欢迎分享和留言。小生在此献丑了。
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
js 基础
探讨instanceof实现原理,并用两种方法模拟实现 instanceof
js数据类型
JavaScript基础学习目录
20个JS优化代码技巧
移动端手势库Hammer.js学习
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服