Multiple OR vs. Array#indexOf

Benchmark created by Mathias Bynens on


Description

I think we can all agree this pattern is sexy, but how well does it perform?

Note that this assumes that Array#indexOf is available, which may not be the case in old browsers.

Setup

var foo = 101;

Test runner

Ready to run.

Testing in
TestOps/sec
Multiple ||, 3 elements, no match
if (foo === 1 || foo === 2 || foo === 3) {
  // code goes here
}
ready
Array#indexOf, 3 elements, no match
if (~[1, 2, 3].indexOf(foo)) {
  // code goes here
}
ready
Multiple ||, 100 elements, no match
if (foo === 1 || foo === 2 || foo === 3 || foo === 4 || foo === 5 || foo === 6 || foo === 7 || foo === 8 || foo === 9 || foo === 10 || foo === 11 || foo === 12 || foo === 13 || foo === 14 || foo === 15 || foo === 16 || foo === 17 || foo === 18 || foo === 19 || foo === 20 || foo === 21 || foo === 22 || foo === 23 || foo === 24 || foo === 25 || foo === 26 || foo === 27 || foo === 28 || foo === 29 || foo === 30 || foo === 31 || foo === 32 || foo === 33 || foo === 34 || foo === 35 || foo === 36 || foo === 37 || foo === 38 || foo === 39 || foo === 40 || foo === 41 || foo === 42 || foo === 43 || foo === 44 || foo === 45 || foo === 46 || foo === 47 || foo === 48 || foo === 49 || foo === 50 || foo === 51 || foo === 52 || foo === 53 || foo === 54 || foo === 55 || foo === 56 || foo === 57 || foo === 58 || foo === 59 || foo === 60 || foo === 61 || foo === 62 || foo === 63 || foo === 64 || foo === 65 || foo === 66 || foo === 67 || foo === 68 || foo === 69 || foo === 70 || foo === 71 || foo === 72 || foo === 73 || foo === 74 || foo === 75 || foo === 76 || foo === 77 || foo === 78 || foo === 79 || foo === 80 || foo === 81 || foo === 82 || foo === 83 || foo === 84 || foo === 85 || foo === 86 || foo === 87 || foo === 88 || foo === 89 || foo === 90 || foo === 91 || foo === 92 || foo === 93 || foo === 94 || foo === 95 || foo === 96 || foo === 97 || foo === 98 || foo === 99 || foo === 100) {
  // code goes here
}
ready
Array#indexOf, 100 elements, no match
if (~[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100].indexOf(foo)) {
  // code goes here
}
ready
Multiple ||, 3 elements, match
if (foo === 1 || foo === 2 || foo === 3) {
  // code goes here
}
ready
Array#indexOf, 3 elements, match
if (~[1, 2, 3].indexOf(foo)) {
  // code goes here
}
ready
Multiple ||, 101 elements, match
if (foo === 1 || foo === 2 || foo === 3 || foo === 4 || foo === 5 || foo === 6 || foo === 7 || foo === 8 || foo === 9 || foo === 10 || foo === 11 || foo === 12 || foo === 13 || foo === 14 || foo === 15 || foo === 16 || foo === 17 || foo === 18 || foo === 19 || foo === 20 || foo === 21 || foo === 22 || foo === 23 || foo === 24 || foo === 25 || foo === 26 || foo === 27 || foo === 28 || foo === 29 || foo === 30 || foo === 31 || foo === 32 || foo === 33 || foo === 34 || foo === 35 || foo === 36 || foo === 37 || foo === 38 || foo === 39 || foo === 40 || foo === 41 || foo === 42 || foo === 43 || foo === 44 || foo === 45 || foo === 46 || foo === 47 || foo === 48 || foo === 49 || foo === 50 || foo === 51 || foo === 52 || foo === 53 || foo === 54 || foo === 55 || foo === 56 || foo === 57 || foo === 58 || foo === 59 || foo === 60 || foo === 61 || foo === 62 || foo === 63 || foo === 64 || foo === 65 || foo === 66 || foo === 67 || foo === 68 || foo === 69 || foo === 70 || foo === 71 || foo === 72 || foo === 73 || foo === 74 || foo === 75 || foo === 76 || foo === 77 || foo === 78 || foo === 79 || foo === 80 || foo === 81 || foo === 82 || foo === 83 || foo === 84 || foo === 85 || foo === 86 || foo === 87 || foo === 88 || foo === 89 || foo === 90 || foo === 91 || foo === 92 || foo === 93 || foo === 94 || foo === 95 || foo === 96 || foo === 97 || foo === 98 || foo === 99 || foo === 100 || foo === 101) {
  // code goes here
}
ready
Array#indexOf, 101 elements, match
if (~[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101].indexOf(foo)) {
  // code goes here
}
ready

Revisions

You can edit these tests or add more tests to this page by appending /edit to the URL.

  • Revision 1: published by Mathias Bynens on
  • Revision 2: published by unscriptable on