zoukankan      html  css  js  c++  java
  • 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);
    

      第一眼觉得应该是写错了,运行应该报错嘛!但是,不对,现实很残忍!浏览器控制台显示为字符串9-3。对于此,我只能呵呵,对于这两种运算,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。

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

  • 相关阅读:
    Java实现数字转化成字符串左边自动补零方法
    java如何对map进行排序详解(map集合的使用)
    java字符串比较的原理
    rancher快速创建mysql和redis
    k8s Ingress介绍和部署IngressController
    k8s+rancher+阿里云镜像简单部署flask项目
    helm 部署minio
    k8s存储数据卷
    k8s搭建redis集群
    团队作业4:第二篇Scrum冲刺博客
  • 原文地址:https://www.cnblogs.com/yanglongbo/p/11135271.html
Copyright © 2011-2022 走看看