JavaScript避坑记
转载请注明源地址: http://www.cnblogs.com/funnyzpc/p/8407952.html
上图=>
有意思的漫画,不知大家看懂了没,这里我想说的是以上这些坑我都碰过,当然包含且不仅限于此, 遂这次借漫画将之前写前端时掉过的坑一一罗列哈(虽然不够完整。。。)。
第一回合:js运算精度问题=>
输入>0.1+0.2==0.3
返回>false 输入>0.1+0.2
返回>0.30000000000000004
很怪,经常会在前端计算的时候碰到这个问题,所以如果是多个变量相运算切勿两两预算后再将其值和其余变量运算,这样很容易掉坑,如果实在不行的话,我支一招,请看->
输入>var num=0.1+0.2;
输入>var num2=num.toFixed(2);
输入>num2
返回>"0.30"
输入>Number(num2);
返回>0.3
思路很简单,先赋给个变量,用toFixed(保留小数位);函数四舍五入,但是这样还不够,如果处理的值还需要参与运算的话,需要用Number(值/变量);函数转换为数字类型,因为js属于脚本语言,这个问题也时常会被忽略,各位一定要小心谨慎才是呀~
第二回合:js变量运算问题,请看=>
输入>"2"-3
返回>-1 输入>"2"+3
返回>"23" 输入>"2"+-3
返回>"2-3"
额,我想说的是。。。你得绕道走。。。,为什么,因为两种类型之间的运算,运算方式走的内部逻辑不一样,有时候java也会碰到这个问题,但是java有巨多处理函数来避坑,对于js处理以上类别问题,能通过其他方式避免更好,如不能还是给个解决思路吧,额,具体点儿就是:将所有的运算参数先转成Number类型再运算,如果是变量类型,切需要注意你的变量是否包含数字,如果不包含就更麻烦了,需要用isNaN(变量);函数来处理后再行Number函数处理后运算之->
输入>Number("2")-Number("3")
返回>-1 输入>Number("2")+Number("3")
返回>5 输入>Number("2")+-Number("3")
返回>-1
第三回合:数字字符串比较大小问题=>
输入>"1">"2"
返回>false 输入>"11">"9"
返回>false
这个问题,怎么说呢,如果需要比较的是数字,请将比较两边的字符串数字转换成数字后再行比较的好(Number(变量);函数),如果比较的是字符串的话,需要说的是如果比较两边都是字符的话,实际比较是按相同位置上的数字大小来比较的,所以看起来会有写怪怪的,如果比较的两边都是一位数的数字的话都是没有问题的,但是仅限于此;额~,需要再啰嗦的是如果两边的值的类型不一致的话一定要转换成一致类型的变量比较才会准确(数字和数字字符串比较也是坑。。。),这里就不给解药,大家看看以上两回合就知道具体解决办法啦。
第四回合:js中true、false与undefined的问题=>
输入>undefined==true
返回>false 输入>undefined==false
返回>false 输入>if(!undefined) console.log(false);
返回>false
看起来更加怪异,对不,额。。。,我想说的是:这个无解。。。(让我先哭会儿...)。。。;对于此只能死记硬背了,简单总结就是:undefined这个东东不等于false也不等于true,但是,但是,敲黑板=>在判断语句中它是false
现在是:2018-02-03 23:31:31,夜深了,狼来了,躲被窝
珍爱生命,远离JS=>JS避坑记的更多相关文章
-
Arduino+AS608指纹锁避坑记
Arduino+AS608指纹锁避坑记 .title { text-align: center; margin-bottom: 0.2em } .subtitle { text-align: cent ...
-
js避坑历险记
代码改变世界,世界改变码农,码农改变代码! 我就是我,我就是一个码农的武林. 前方JS巨坑出没,请注意集中力! 巨坑1:js精度问题 前段时间去一家物流公司面试,做了一个js题,印象尤为深刻: var ...
-
JavaScript面试题(珍爱生命,远离面试)
1.使用 typeof bar === "object" 判断 bar 是不是一个对象有神马潜在的弊端?如何避免这种弊端? 使用 typeof 的弊端是显而易见的(这种弊端同使用 ...
-
Node.js的那些坑——如何让异步并发方法同步顺序执行(for循环+异步操作)
1 前言 nodejs的回调,有时候真的是让人又爱又恨的,当需要用for循环把数据依次存入数据库,但是如果使用正常的for循环,永远都是最后一次值的记录,根本不符合要求. 解决此方案有几种,例如闭包( ...
-
15. Go 语言“避坑”与技巧
Go 语言"避坑"与技巧 任何编程语言都不是完美的,Go 语言也是如此.Go 语言的某些特性在使用时如果不注意,也会造成一些错误,我们习惯上将这些造成错误的设计称为"坑& ...
-
【转】Vue 脱坑记 - 查漏补缺(汇总下群里高频询问的xxx及给出不靠谱的解决方案)
前言 文章内容覆盖范围,芝麻绿豆的破问题都有,不止于vue; 给出的是方案,但不是手把手一字一句的给你说十万个为什么! 有三类人不适合此篇文章: “喜欢站在道德制高点的圣母婊” – 适合去教堂 “无理 ...
-
Vue 脱坑记
问题汇总 Q:安装超时(install timeout) 方案有这么些: cnpm : 国内对npm的镜像版本 /* cnpm website: https://npm.taobao.org/ */ ...
-
Vue + TypeScript + Element 搭建简洁时尚的博客网站及踩坑记
前言 本文讲解如何在 Vue 项目中使用 TypeScript 来搭建并开发项目,并在此过程中踩过的坑 . TypeScript 具有类型系统,且是 JavaScript 的超集,TypeScript ...
-
【踩坑记】从HybridApp到ReactNative
前言 随着移动互联网的兴起,Webapp开始大行其道.大概在15年下半年的时候我接触到了HybridApp.因为当时还没毕业嘛,所以并不清楚自己未来的方向,所以就投入了HybridApp的怀抱. Hy ...
随机推荐
-
Groovy入门教程
Groovy入门教程 kmyhy@126.com 2009-5-13 一.groovy是什么 简单地说,Groovy 是下一代的java语言,跟java一样,它也运行在 JVM 中. 作为跑在JVM ...
-
Codeforces #270 D. Design Tutorial: Inverse the Problem
http://codeforces.com/contest/472/problem/D D. Design Tutorial: Inverse the Problem time limit per t ...
-
ComboBox的数据绑定
这里的ComboBox指System.Windows.Forms中的ComboBox. 使用对象数据源 IList<Model> models = ModelService.GetAllM ...
-
C语言实现二叉树-03版
我们亲爱的项目经理真是有创意,他说你给我写得二叉树挺好的: 功能还算可以:插入节点,能够删除节点: 可是有时候我们只是需要查找树的某个节点是否存在: 所以我希望你能够给我一个find功能: 还有就是, ...
-
PHP 防止表单重复提交
原理是:首先在表单页生成一个 随机不重复的 token(可以利用时间戳),把 token 的值分别存入 session 和 表单的隐藏域:当提交表单的时候,在接收页对比传递过来的 token 和ses ...
-
C#实现监控网络流量
本文转载自:http://blog.csdn.net/zhanjianshinian/article/details/8177851 public partial class NetJiankongF ...
-
外国的Delphi网站
www.phidels.com delphifr.com http://www.swissdelphicenter.com/torry/showcode.php?id=787 B4A delphifa ...
-
【前端酷站】分享一个纯 Javascript 的图表库与立体像素风制作~
今天小编为大家推荐一个神奇的酷站.ECharts,一个纯 Javascript 的图表库. 以下是各个几个不错的界面的介绍: 首页:http://echarts.baidu.com/ 在首页有完整的说 ...
-
【转】CSS颜色代码大全
转自http://www.cnblogs.com/axing/archive/2011/04/09/CSS.html FFFFFF #DDDDDD #AAAAAA #888888 #666666 #4 ...
-
控制HTML页面内容不能选中的方法
方法有二 一: css 方法 user-seletct: none;-webkit-user-seletct: none;-moz-user-seletct: none;-ms-user-seletc ...