Javascript坑多众所周知,本文收集了一些常见的坑,以及避坑的方法。
坑多的js成了主流:)原因大致有以下吧:

  • 浏览器支持
  • 谷歌为js写了v8引擎,性能炸裂
  • 基于js的nodejs,让js可以脱离浏览器运行,使前端语言变为全栈语言
  • 轮子众多,开发效率高
  • 语法简单,上手快

综上,js占尽互联网风口,省脑力(学习曲线低),一招鲜(前后通吃),快(性能还好,在各端能接受的范围)。

坑多,还得吃。尽量以最短的文字和代码,让你吃饱吃好。

1. 0.1 + 0.2 != 0.3

浮点数不精确,所以0.1 + 0.2 != 0.3,而是0.30000000000000004。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
0.1 + 0.2 == 0.30000000000000004
// true
// 解决方法
function add(a, b) {
let c, d, e;
try {
c = a.toString().split('.')[1].length;
} catch (f) {
c = 0;
}
try {
d = b.toString().split('.')[1].length;
} catch (f) {
d = 0;
}
e = Math.pow(10, Math.max(c, d));
return Math.round(a * e + b * e) / e;
}

2. Array().fill()指向相同的引用数据类型

1
2
3
4
5
6
7
8
9
let arr = new Array(3).fill({name: '张三'})
arr[0].name = '李四'
console.log(arr)
// 结果:[{name: "李四"}, {name: "李四"}, {name: "李四"}]
// 解决方法
let arr2 = new Array(3).fill().map(() => ({name: '张三'}))
arr2[0].name = '李四'
console.log(arr2)
// 结果:[{name: "李四"}, {name: "张三"}, {name: "张三"}]

未完待续。。。