js避坑历险记

代码改变世界,世界改变码农,码农改变代码!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。

以上的坑,大家都碰到过么?嘻嘻,若是你还碰到其余的坑,欢迎分享和留言。小生在此献丑了。

相关文章
相关标签/搜索