javascript之我掉过的那些坑

JSON.parse()方法

在使用原生JSON.parse()方法解析json形式的字符串的时候,例如:

call方法演示
1
2
var str = '{"key":"value"}';
JSON.parse( str );

可以返回期望的json对象,但是如果改写上述代码为
call方法演示
1
2
var str = "{'key':'value'}";
JSON.parse( str );

则会报错,也就是说使用JSON.parse()方法需要被解析的json形式字符串要严格使用双引号分别包裹键和值

javascript 中处理货币问题

在使用javascript处理货币运算(主要是加减乘运算)的时候,会碰到对浮点数的运算(整数运算是没有问题的),然后某些情况就会出现算术上的差异,这主要是因为计算机是以二进制方式处理数据,对于某些十进制的运算不能得到精确值,比如:

货币处理方法演示1
1
2
3
4
var price = 56.06;
console.log( price*11 );

console.log( price - 0.01 );

以上两种情况都会输出一长串结果,并不符合我们的预期。
针对上述情况,有一种解决方案:
方案一:对计算结果进行四舍五入运算,具体做法是使用Math.round()函数,因为这个函数返回最接近的整数,所以要先把原数据扩大100倍,再对舍入的结果缩小100倍
方案二:从一开始就对所有计算中的数据扩大100倍,使之变为整数运算,之后再对计算的最终结果缩小100倍,得到正确的结果(此处又掉坑,比如8.55*100就得不到855)

货币处理方法演示2
1
2
3
4
5
6
7
8
9
10
// 方案一:
var price = 56.06;
console.log( Math.round( ( price*11 )*100 )/100 );

// 方案二:
/*
var price = 56.06;
var intPrice = price*100;
console.log( ( intPrice*11 )/100 );
*/