最近一直忙着升级美化代码,其中就遇到许多程序开发中不经常写的方式。
例如:三元预算法包含了条件链的方式。
function u() {
return con1 ? value1
: con2 ? value2
: con3 ? value3
: value4;
}
对于上面的代码采用什么样的美化方式比较合理那?视乎用下面的代码进行美化比较合理。三元运算符是右结合的,最好采用if…. else if…. else…这种方式进行优化。不过这个时候有几个点要处理:
function u() {
if (con1) {
return value1;
} else if (con2) {
return value2;
} else if (con3) {
return value3;
} else {
return value4;
}
}
我们稍微变一下:如果原始预算是赋值语句,如下面的代码。
function u() {
let a = con1 ? value1
: con2 ? value2
: con3 ? value3
: value4;
return a;
}
这个时候问题又来了,转换条件代码的时候,block statement就不能有 return statement ,而是assignment expression. 条件语句中,可以添加或者不添加block statement,使用哪种更合适?是否给用户选择的权利,还是全部默认。
这个时候不免又出现了新的问题:
从上面的思考历程来看,越写越复杂,思考的越来越多,javascript代码美化升级的进展一再推迟。这周终于还是下定决定,开发完一个功能就上线一个功能。先上线再说。
还有几种代码优化比较繁琐:
let j = {
get: (t, e) => P.has(t) && P.get(t).get(e) || null
;
object expression 中包含了 property,其中property 的值为箭头运算符, 箭头运算符的内容为逻辑运算表达式。 对于这种代码如果优化的话,代码是不是下面这样子:
let j = {
get(t, e){
if(P.has(t)){
return P.get(t).get(e)
}else{
return null
}
}
};
其中源代码是这样的:
get(element, key) {
if (elementMap.has(element)) {
return elementMap.get(element).get(key) || null;
}
return null;
},
通过对比我们就可以发现,上面的优化代码是存在问题的,P.has(t)为真的时候,这个时候返回的是P.get(t).get(e)的结果,并且当P.get(t).get(e)为假的时候,也不会返回null. 可见美化代码存在了瑕疵我们用一个列子校验下:
let d = {
get: (e) => 0
};
let e = "e";
console.info(m = 1 && d.get(e) || null);
let n = function () {
if (m = 1) {
return d.get(e)
} else {
return null
}
};
console.info(n());
//输出结果是 null \n 0
P.has(t) && P.get(t).get(e) || null 这个逻辑表达式的美化应该是什么样子的那?