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