js避坑历险记

时间:2019-07-04
本文章向大家介绍js避坑历险记,主要包括js避坑历险记使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

代码改变世界,世界改变码农,码农改变代码!

我就是我,我就是一个码农的武林。

前方JS巨坑出没,请注意集中力!

巨坑1:js精度问题

前段时间去一家物流公司面试,做了一个js题,印象尤为深刻:

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的计算问题

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。

以上的坑,你们都碰到过么?嘻嘻,如果你还碰到其他的坑,欢迎分享和留言。小生在此献丑了。

原文地址:https://www.cnblogs.com/yanglongbo/p/11135271.html