问题总结
问题一:为什么定义变量时用void 0 代替undefined?
因为,javascript中undefined并不是关键字,可以作为变量,在局部作用域中可以当做变量使用:
function test () {
var undefined = 1;
var a = undefined;
console.log(a);
}
test(); // 1
但是undefined是global object的属性,在IE上,它是个全局变量。 es5后,全局作用域下undefined non-configurable, non-writable, 参考地址:developer.mozilla.org/en-US/docs/…
var undefined = 2;
var a = undefined;
console.log(undefined) // undefined
console.log(a) // undefined
mdn规范建议:变量尽量避免赋值undefined,而是用void去转换。
问题二:为什么在 JavaScript 中,0.1+0.2 不等于 0.3
非整数的Number类型无法用==或者===进行比较,浮点数精度计算是转换为二进制后运算,0.1和0.2转换为二进制都是无限循环,需要四舍五入,所以导致==左右值不等。正确的比较方法是使用javascript提供的最小精度值,检查相减后的值是否小于最小精度值
0.1 + 0.2 - 0.3 <= Number.EPSILON
以上内容是在学习了winner老师的重学前端课程后,自己做的总结,不对或者理解不透彻的地方,还望大家留言告知,谢谢。