• 首页
  • javascript
  • 走火入魔javascript — 分享几个好多人执意往里跳的”坑”

走火入魔javascript — 分享几个好多人执意往里跳的”坑”

javascript 是一门容易上手也是一门如意犯错的语言,为什么这么说,它零活的类型转化有时让你摸不到头脑.

类型有没有定义都无所谓,一旦你的变量前少了var ,那可能会造成一个严重的bug ,污染了全局变量,甚至修改了全局变量的值,导致其他引用该变量的程序出错.

函数形参和实参可以不匹配,不匹配到什么程度呢? 类型可以不匹配,甚至参数数量也可以不匹配……..等等javascript里的一些坑,如果你发现了一定要绕过去,如果你发现不了,那可能浪费你很多的时间去调试一个bug

1.关于 NaN  类型,这是个非数值类型,那它的值是什么呢? 谁都不知道,的确,它自己都不知道.所以看下面的坑

if(NaN==NaN){
console.log('今天星期一');
}
if(NaN!=NaN){
console.log('今天不是星期一');
}

亲,如果不看答案,你会猜测上面那个输出什么信息吗?

答案是: 今天不是星期一

为什么这样?因为NaN是个不确定的数

2.一个数值传递  A==B  ,  B==C  , 所以  C==A  但是在javascript中,有时还真不成立,看下面的例子

if(''=='0'){
console.log('今天星期一');
}
if('0'==0){
console.log('今天星期二');
}
if(0==''){
console.log('今天星期三');
}

上面的结果让你不知所措,为什么,因为 除了 今天是星期一 没有弹出,其他两条都弹出了.

为什么会产生上面的结果,这就要分析javascript中灵活多变的 类型转化,关于类型转化准备单独开一篇博来说明.

3.关于javascript中的10进制浮点数计算的模糊四舍五入导致明显的常识性错误

if((0.1+0.2)==0.3){
alert('我等于0.3');
}
else{
alert('我不等于0.3');
}

我声明我不是在考大家10以内的加减法,关于上面的结果是弹出 else 分支内容”我不等于0.3″  不管你信不信,反正我是信了.

为什么会出现上面这个低级错误呢,因为javascript中的类型设计中,关于数值类型只有Number 它包括了我们常见的所有数值(整数,小数,正负数….)而不像C#,JAVA 那样分为Int,float,double 等…… 并且javascript中对于10进制的浮点数默认采用4四舍五入的模糊精确,所以导致了 0.1+0.2!=0.3 的悲剧,其实0.1+0.2 等于 0.29999999  所以在用javascript进行浮点数计算的时候一定避免跳入这个坑中.


回到顶部