我试图允许用户定义的逻辑标准。由于用户定义基本上是字符串,因此我试图通过避免字符串比较来提高代码效率。例如,像a == 10
这样的简单测试将由数组
var userDef = ['a', '==', 10]
为了使逻辑评估更有效率,我想创建一个像ffg这样的对象:
var binaryOperator = {'==': 0, '>': 1, '<': 2}
..所以当我挖掘阵列时,我可以做到。
if(binaryOperator[userdef[1]] == 0)
{
return (obj[userDef[0]] == userDef[2])
}
......当然obj.a =某事。从表面上看,上面的代码避免了字符串比较。
但它真的吗?引用binaryOperator[userdef[1]]
真的很快还是在某处还涉及字符串比较?
换句话说,thisObj.a
和thisObj['a']
之间是否存在性能差异?
答案 0 :(得分:2)
您可以省略对运算符的检查并将函数作为值,如
var binaryOperator = {
'==': function (a, b) { return a === b; },
'<': function (a, b) { return a < b; },
'>': function (a, b) { return a > b; }
};
Javascript中的对象可以访问 O(1)。
进一步阅读:
JavaScript object structure: speed matters,使用完全定义的对象,而不是在运行时添加属性。