javascript之容易忽略的错误

javascript本身是弱类型的语言,加上它的很多很好用的特性,让我使用的时候会很方便,但是方便的同时也会带来很多很容易忽略的问题,我找了几个比较容易出问题的地方解析一下:

typeof

这个关键字应该算是运算符,它可以得到当前变量的类型:
> typeof 1.1
'number'
> typeof "sssss"
'string'
> typeof {}
'object'
那么一些特殊的变量会返回什么呢?

> typeof null
'object'
> typeof undefined
'undefined'
> typeof [1,2,3]
'object'
> typeof NaN
'number'
> typeof Infinity
'number'
各有各的返回值,所以在使用这个运算符的时候一定要很小心,如果想判断一个变量是否为空(null, undefined),直接用!object即可。

parseInt

有人会问parseInt不就是一个字符串转数字的方法吗,它有啥问题呢?
我们举个例子看看:
> parseInt('89abc')
89
> parseInt('abc')
NaN
额,很奇怪吧,第一个例子明明是一个异常的字符串,为什么parseInt之后还是出结果呢,那是因为parse是这样的,它会找到数字去转换成整数,直到遇到非数字后就不再解析,直接返回已经解析的数字,如果从开始到最后都没有找到数字,就会返回NaN。
所以说这个方法用的时候还是小心点吧。

+

这个"+"运算符是做加法和字符串拼接用的,前后两个变量如果都是数字,就会进行加法运算,如果有一个是字符串,就会进行字符串拼接,由于javascript是弱类型语言,所以这个"+"的使用也是要非常小心才行。
> 1 + 2
3
> '1' + 2
'12'


浮点数

和c/c++一样,浮点数不能很正确的处理浮点数,比如 0.1 + .02 不会等于0.3,我们看看例子:
> 0.2+0.1 == 0.3
false

那为什么呢?我们看看加之后的值:
> 0.2+0.1
0.30000000000000004
> 0.3+0.1
0.4
> 0.4+0.1
0.5
> 0.5+0.1
0.6
> 0.6+0.1
0.7
> 0.7+0.1
0.7999999999999999

是吧,这个值是不确定的,不一定能和我们真实的结果做对比,这个地方使用的时候也要小心点了。


===、!== 和==、!=

在我们使用javascript的时候,尽量使用===和!==,不要去使用==和!=什么原因呢?我们看看答案:

> '' == '0'
false
> 0 == ''
true
> 0 == '0'
true
> false == 'false'
false
> false == '0'
true
> false == undefined
false
> false == null
false
> null == undefined
true
> '\n' == 0
true

为什么明明不同,却也能返回true呢?那是因为==和!=会对两边的变量的类型做转换,转换为可以真正对比的类型,那就有可能会返回true。

eval

eval会传递一个字符串给javascript编译器,并执行,有些时候这个特性会让我们解决一些要走很多弯路的问题,但是如果滥用会导致代码很难看,并且让性能急剧下降。毕竟你给个字符串到编译器,编译器要重新编译执行的。

continue

少用它吧,毕竟会影响性能。






  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值