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

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

前方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。

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

js避坑历险记的更多相关文章

  1. 珍爱生命,远离JS=>JS避坑记

    JavaScript避坑记 转载请注明源地址: http://www.cnblogs.com/funnyzpc/p/8407952.html 上图=> 有意思的漫画,不知大家看懂了没,这里我想说 ...

  2. spring-boot-starter-thymeleaf 避坑指南

    第一步:pom配置环境 先不要管包是做什么的 总之必须要有 否则进坑 <!--避坑包--> <dependency> <groupId>net.sourceforg ...

  3. 在mpvue中使用map如何避坑

    最近在做一个需求,当用户放大地图到某个级别时,自动显示marker的callout标签,当小于这个缩放级别时,则隐藏callout.然而在我实现的过程中,却发现一个严重的问题:当我操作marker数据 ...

  4. 15. Go 语言“避坑”与技巧

    Go 语言"避坑"与技巧 任何编程语言都不是完美的,Go 语言也是如此.Go 语言的某些特性在使用时如果不注意,也会造成一些错误,我们习惯上将这些造成错误的设计称为"坑& ...

  5. Arduino+AS608指纹锁避坑记

    Arduino+AS608指纹锁避坑记 .title { text-align: center; margin-bottom: 0.2em } .subtitle { text-align: cent ...

  6. 双刃剑MongoDB的学习和避坑

    双刃剑MongoDB的学习和避坑 MongoDB 是一把双刃剑,它对数据结构的要求并不高.数据通过key-value的形式存储,而value的值可以是字符串,也可以是文档.所以我们在使用的过程中非常方 ...

  7. Windows环境下Anaconda安装TensorFlow的避坑指南

    最近群里聊天时经常会提到DL的东西,也有群友在学习mxnet,但听说坑比较多.为了赶上潮流顺便避坑,我果断选择了TensorFlow,然而谁知一上来就掉坑里了…… 我根据网上的安装教程,默认安装了最新 ...

  8. MyBatis 一级缓存避坑

    MyBatis 一级缓存(MyBaits 称其为 Local Cache)无法关闭,但是有两种级别可选: package org.apache.ibatis.session; /** * @autho ...

  9. electron 编译 sqlite3避坑指南---尾部链接有已经编译成功的sqlite3

    electron 编译 sqlite3避坑指南(尾部链接有已经编译成功的sqlite3) sqlite很好用,不需要安装,使用electron开发桌面程序,sqlite自然是存储数据的不二之选,奈何编 ...

随机推荐

  1. WinForm控件与WPF控件的交互

    原文:WinForm控件与WPF控件的交互 这个问题其实也可以理解为:怎样在WPF/XAML中使用Winform中的控件(如PictureBox)?首先看看XAML代码:(注意下面加粗的部分)< ...

  2. Linux性能测试 pmap命令

    名称:       pmap - report memory map of a process(查看进程的内存映像信息)用法       pmap [ -x | -d ] [ -q ] pids... ...

  3. 仿真算法数据结构与算法 C++实现

    模拟算法:仿真的全过程,通过改变数学模型参数,进一步观察状态更改这些参数发生变化正当程序. 算法思路:利用随机函数来模拟不可预测发生在自然界.(srand() 和 rand()函数生成一个随机数) 模 ...

  4. Angular路由守卫 canDeactivate

    目的 离开页面时,做出逻辑判断 以ng-alain的项目为基础做演示 效果如图: 关键代码 定义一个CanDeactivateGuardService export class CanDeactiva ...

  5. .net core使用ef 6

    需要是core(with full .net framework)的项目,因为core本身不支持ef 6 注意新建的项目是.net framework+.net core的 有空来填坑,参考资料写的很 ...

  6. WPF特效-粒子动画

    原文:WPF特效-粒子动画 WPF实现泡泡龙小游戏效果.     /// -Ball to Ball Collision - Detection and Handling    /// http:// ...

  7. VC中出现“烫”和“屯”的原因(栈区的每一个字节都被0xCC填充了,也就是int 3h的机器码,动态分配的堆,VC的Debug用0xCD填充堆的空间,就出现了“屯”)

    相信经常用VC的朋友对屏幕输出的一大堆“烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫”不会陌生,但是也许会很奇怪,为什么会出现“烫”字呢?莫非改程序导致系统运行缓慢,发热过高???非也!下面让我解释 ...

  8. cordova-plugin-local-notifications发送Android本地消息

    原文:cordova-plugin-local-notifications发送Android本地消息 1.GitHub源代码地址: https://github.com/katzer/cordova- ...

  9. ubuntu 16.04 android studio 开发环境搭建

    安装步骤: 1. 安装 Java developer kit 2.安装 Android developer kit 3.安装 Android studio 4.真机调试 第一次用Linux,命令基本不 ...

  10. intel汇编笔记

    另一篇汇编学习笔记AT&T Assembly on Linux  (linux下) mov ax,bx     bx到ax 读数据过程:cpu通过地址线发送地址a,控制线向存储器发送读命令,存 ...