有关检查变量值是否可以是多个值之一的最有效方法的任何建议,而不是尝试使用与一堆||连接的long if条件(ORS)?
我看到像if (value in {'thing1':1, 'thing2':1, 'thing3':1})
这样的东西,但我不完全确定它是如何工作的。
in
被视为什么?操作员?
答案 0 :(得分:0)
如果您的值不是字符串,那么使用in
或Combining multiple conditions into one in Javascript中显示的indexOf
方法将比链式OR测试效率低得多,因为这两者都需要您将值转换为字符串并进行字符串比较。将变量与其原始值进行比较几乎总是更有效。
假设您正在寻找与模式不匹配的值(比如找出您的测试编号是奇数还是2的幂),那么您只需要做一些事情来提高链式OR测试的速度。例如,首先测试最可能的值将提高整体性能;例如,如果X通常是5比7,那么:
if (X == 5 || X == 7)
从长远来看,会比以下更有效:
if (X == 7 || X == 5)
因为条件测试在表达式变为真时终止。
假设您的值是字符串,in
和indexOf
方法不会比类似构造的链式OR更有效,并且,鉴于浏览器变幻莫测,可能会更糟。除非您可以确定要测试的值中的模式,否则在找到匹配项之前无法检查每个值。