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

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

前方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. HDU 4919 打表找规律 java睑板 map 递归

    == oeis: 点击打开链接 瞎了,x.mod(BigInteger.ValueOf(2)).equal( BigInteger.ValueOf(1)) 写成了 x.mod(BigInteger.V ...

  2. 【HLSL学习笔记】WPF Shader Effect Library算法解读之[DirectionalBlur]

    原文:[HLSL学习笔记]WPF Shader Effect Library算法解读之[DirectionalBlur] 方位模糊是一个按照指定角度循环位移并叠加纹理,最后平均颜色值并输出的一种特效. ...

  3. 对std::string和std::wstring区别的解释,807个赞同,有例子

    807down vote string? wstring? std::string is a basic_string templated on a char, and std::wstring on ...

  4. theano 深度学习大全

    1. theano 的设计理念与性能分析 Theano: a CPU and GPU Math Expression Compiler 2. thenao 深度学习 Deep Learning Tut ...

  5. 从加载DLL的中获取放置于Resources文件夹中资源字典的几种方法

    原文:从加载DLL的中获取放置于Resources文件夹中资源字典的几种方法 主程序 为 Main_Test.exe 被加载的DLL 为 Load_Test.dll  此DLL 中 有一个 文件夹Re ...

  6. react学习(7)——路由配置

    1. 新建文件routes.js,分别定义页面的路由信息和其他信息 const Routes = { : { title: "home", pageName: "home ...

  7. .NET Framework 源代码

    微软在线源代码:http://referencesource.microsoft.com/ 压缩包:http://download.csdn.net/detail/xunzaosiyecao/8497 ...

  8. NET实现RSA AES DES 字符串 加密解密以及SHA1 MD5加密

    本文列举了    数据加密算法(Data Encryption Algorithm,DEA) 密码学中的高级加密标准(Advanced EncryptionStandard,AES)RSA公钥加密算法 ...

  9. Win8Metro(C#)数字图像处理--2.6图像对比度调整

    原文:Win8Metro(C#)数字图像处理--2.6图像对比度调整  2.6图像对比度调整函数 [函数名称] 图像对比度调整函数ContrastAdjustProcess(WriteableBi ...

  10. c#获取电脑运行状态(cpu,内存,网络,系统运行时间)

    public class DeviceMonitor { static readonly PerformanceCounter cpuCounter = new PerformanceCounter( ...