代码改变世界,世界改变码农,码农改变代码!javascript
我就是我,我就是一个码农的武林。java
前方JS巨坑出没,请注意集中力!面试
巨坑1:js精度问题浏览器
前段时间去一家物流公司面试,作了一个js题,印象尤其深入:spa
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]。坑爹啊!玩我呢!blog
码农大人我立刻速查百度,才发现js确实是有精度一说,浏览器处理不了太大的数据,范围是2的平方到52次方之间;例如16个9是和10000000000000001相等,懵逼了吧!ip
同时,浏览器也存在处理小数不许确的事实。这是由于计算机只识别二进制数据,并且只能显示必定的有限长度。字符串
小数精度常见场景:购物车里物品的价格计算与显示,在不一样浏览器或设备上显示价格不同,可能就是精度的问题。数学
解决方案:toFixed后再Number一下就能够了。console
巨坑2:js的计算问题
console.log("9"+-3);
第一眼以为应该是写错了,运行应该报错嘛!可是,不对,现实很残忍!浏览器控制台显示为6。对于此,我只能呵呵,对于这两种运算,js的内部处理逻辑是不太同样的。并且不加括号也是能够运算的。要避免这种坑,除了书写规范外,我们最好先isNaN后再Number一下,再来进行运算。
巨坑3:js的字符比较问题
console.log("37">"8");
脑洞仍是限制了个人想象力,答案居然是false。细查,发现js中对于字符串的比较,是按位从左到右的相同位置来作比较的。避坑指南:忍忍吧,仍是先Number一下再作比较哦,字符串跟数字必定要分清楚哦!
巨坑4:js中undefined作比较的状况
console.log(undefined==true);//false console.log(undefined==false);//false if(!undefined)console.log(false);//输出了false
上面的是什么梗?undefined和true或false作比较都是false!没天理啊,为啥?码农大人我也不知道,姑且死记硬背吧,注意undefined做为条件来判断是false。
以上的坑,大家都碰到过么?嘻嘻,若是你还碰到其余的坑,欢迎分享和留言。小生在此献丑了。