(1) 0.1 + 0.2 = ?
你是否觉得一眼看上去,这么简单,不就是等于0.3。图样图破森
JS的浮点数精度问题:
1 请在代码中浮点数先转换为整数进行运算,最后再除以倍数:
针对一位浮点数的运算,用
(0.1 * 10 + 0.7 * 10) / 10
>代替
0.1 + 0.7
,
针对两位浮点数的运算,用
(0.13 * 100 + 0.76 * 100) / 100
>代替
0.13 + 0.76
,同理可推
2 利用toFixed(args)知道浮点数的小数位数
(2) 看题说话
1 2 3 4 5
| (function(){ var x=y=1; })() console.log(x); console.log(y);
|
这里应该考虑到闭包,隐式创建全局变量等问题
1 2 3 4 5 6 7 8 9
| var undefined; undefined == null; 1 == true; 2 == true; 0 == false; 0 == ''; NaN == NaN; [] == false; [] == ![];
|
平时判断过一个对象(值)是否为空吧,仔细考虑一下这些结果吧。
那么,接着,
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| var foo = "11"+2-"1"; console.log(foo); console.log(typeof foo);
var foo2 = 11 +2 -'1'; console.log(foo2); console.log(typeof foo2);
var foo3 = 11 +2 +'1'; console.log(foo3); console.log(typeof foo3);
var foo4 = '1'*2+"1"; console.log(foo4); console.log(typeof foo4);
var foo5 = '1'*2-"3"; console.log(foo5); console.log(typeof foo5);
|
这里应该考虑到隐式转换等技巧。
1 2 3 4 5
| var a = new Object(); a.value = 1; b = a; b.value = 2; alert(a.value);
|
1 2 3 4 5 6
| var foo = 1; (function(){ console.log('test1', foo); var foo = 2; console.log('test2', foo); })()
|
这里应该考虑到变量提升、变量作用域等问题。
技巧之转换
1 2 3 4 5 6 7 8 9
| var a=0;!!a
var b=1;!!b
var c='';!!c
var d='0';!!d b_bool = !!myVar,
|
基础变量的前面增加!!
的时候,会转换成为boolean值,不为空的字符串以及值不为0的数字都会转换为true。
1 2 3 4 5 6 7 8 9
| var a = 11; var b; b = +a; console.log(b, typeof b);
var a2 = '11'; var c; c= +a2 console.log(c, typeof c);
|
变量为数字或者可以转换为数字的数字字符串的,前面增加+
,可以转换为数字。