JavaScript 重构最佳实践
2018-12-08 本文已影响30人
番茄沙司a
-
尽量使用
forEach
,而不是循环[1, 2, 3].forEach((element) => console.log(element));
-
最好使用
map
来创建一个带有新值的数组,而不是用循环或forEach
来更改数组的值[1, 2, 3].map((element) => element * 2);
-
过滤一个数组来剔除一些元素时,可以使用
filter
,而不是创建一个新的数组并推入符合条件的元素[1, 2, 3, 4, 5, 6, 7].filter((element) => (element % 2 == 1))
Console:[ 1, 3, 5, 7 ]
-
将数组转化成其他类型的值(对象、数字等)时,建议使用
reduce
[1, 2, 3].reduce((element, accumulator) => element + accumulator);
Console:6
应用:返回一些累计的值,如:求和/乘积/对象/字符串/数组,要观察一下是否与你循环的数据类型不一致,那么可能就要使用
reduce
。 -
避免在条件体中重新赋值
不要这样:
let emailSubject = "Hi"; if (weKnowName) { emailSubject = emailSubject + "" + name; }; sendEmail(emailSubject, emailBody);
根本不需要赋值,可以用三元语法简化语句:
function emailSubject() { return weKnowName ? `Hi ${name}` : `Hi` }; sendEmail(emailSubject(), emailBody);
-
重视避免破坏性函数
数组函数:
splice
、fill
、push
、pop
对象:
defineProperties
、Oject.assign
(可以通过给它一个{}作为第一个参数避免改变第一个参数对象)作为变量的数字和字符串:
+
和-
,即添加和拼接数组 - 改变特定索引值的函数和语法糖:
x[0]="something"
改变或创建属性 - 点和方括号语法:
.prop =
、[prop]
-
不要返回
null
-
引用透明与避免状态
-
处理随机性
-
隔绝非纯函数
-
无参数编程