我对 JS 还比较陌生,正在尝试确定这两个选项之一是否比另一个更有优势。
我经常使用数组,并且希望有一个多功能工具可以在给定时间对它们执行任何我想要的操作。
这是我正在尝试做出决定的两个选项:
const arr = {
arrCreate: function(v){
if (!Array.isArray(v)) {
v = [v];
};
return v;
},
arrString: function(v){
v = v.length === 1 ? v.toString() : v;
return v;
},
arrShift: function(v){
if (v.length > 1) {
v.shift();
};
return v;
};
};
var array = arr.arrString(array);
对比。
function arr(v,v2){
switch(v2){
case 'array':
if (!Array.isArray(v)) {
v = [v]
};
break;
case 'string':
v = v.length === 1 ? v.toString() : v;
break;
case 'shift':
if (v.length > 1){
v.shift()
};
break;
default:
}
return v;
}
var array = arr(array,"string");
这两个在功能上是相同的(AFAIK),但我猜测其中一个比另一个具有我不知道的性能优势。哪个会是首选,为什么?
最佳答案
开关
是
- 难以阅读(根据参数执行许多不相关的任务,故意违反 single responsibility principle)
- 更难编写(只需尝试忘记
中断
) - 测试起来稍微困难一些(确保其完全覆盖)
- 调用起来有点笨拙(
thing.do(thing,args)
而不是thing.dothing(args)
)。
如果您这样做只是因为 return v;
,您可以使用箭头函数,例如
v => Array.isArray(v) ? v : [v]
v => v.length === 1 ? v.toString() : v
(第三个需要返回)
关于Javascript:带有方法的对象与带有开关的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59722694/