Javascript 哪一个在速度和内存使用方面更好,还是仅仅是最佳实践

Javascript 哪一个在速度和内存使用方面更好,还是仅仅是最佳实践,javascript,Javascript,我有一个函数,里面有很多常量变量。是否最好将这些变量存储在哈希映射中(这将是一个复杂的映射)(哈希映射中会有哈希映射。或者几个if,else if子句。就可读性而言,它们大致相同。但我担心的是占用的内存和应用程序的速度。这是一个极其简化的问题版本: function myFunction(data) { var a = 0, b = 0, c = 0, d = 0; if(data == value1) { a += 3; if(value1Fet

我有一个函数,里面有很多常量变量。是否最好将这些变量存储在哈希映射中(这将是一个复杂的映射)(哈希映射中会有哈希映射。或者几个if,else if子句。就可读性而言,它们大致相同。但我担心的是占用的内存和应用程序的速度。这是一个极其简化的问题版本:

function myFunction(data) {
    var a = 0, b = 0, c = 0, d = 0;
    if(data == value1) {
        a += 3;
        if(value1Fetched) {
           b += 6;
           c +=2;
           d +=1;
        }
    } else if (data == value2) {
        a += 1;
        if(value2Fetched) {
           b += 4;
           c +=9;
        }
    }
return a+b+c+d;
}
显然有更多的标志和值(数据也是一个哈希映射)

第2版:

function myFunction(data) {
    var a = 0, b = 0, c = 0, d = 0;
    var myHash = {
        value1: {
            a: 3,
            b: 6,
            c: 2,
            d: 1            
        },
        value2: {
            a: 1,
            b: 4,
            c: 9,
            d: 0  
        }
    };
    a += myHash[data][a];
    if(isFetched(data)){
        b += myHash[data][b];
        c += myHash[data][c];
        d += myHash[data][d];
    }
return a+b+c+d;
}
对于混乱的(伪)代码,我感到抱歉,我试图使其尽可能可读。
这已经困扰了我好几天了,工作中的每个人都有不同的观点。

我想说,第二个问题的可扩展性远远超过了任何可能的(也不太可能的)性能问题。如果需要,您甚至可以动态更改该结构,或者在映射结果不同的两个环境中使用多个实例


对于像您发布的示例这样小的示例,它可能会慢一些,但听起来实际的示例可能有很多条目,在这种情况下,使用映射查找的复杂性是O(log(n))而不是O(n)(希望这些术语是正确的!从大学开始已经有一段时间了)。大型JSON对象(字符串映射)在JavaScript中并不少见,事实上,您经常使用它们来实现公共代码中的库和浏览器功能。

没有
?意味着什么:?@NinaScholz哦,对不起。这是一个输入错误。事实上,我是在内联完成它们,然后决定进行一次测试if@Anthony只是一个旁注。如果你要做一系列的“如果”对于数据值,最好使用switch语句。变量没有初始化,只是声明了。所以
a+=myHash[data][a]
不起作用,除非你想得到
NaN
。好的,很好。最后一点:不要重复点,而是尽可能多地为一个var分配对象。例如:不要太多
myHash[data][X]
,试试
var mhd=myHash[data];…mhd[a]…mhd[b]…
我最终不得不写很多if语句,所以我决定使用所有的if来实现同质化。