Когда коту делать нечего, он микрооптимизирует код. И столкнулся с таким случаем.
var a = 'Android'
a === 'Android' || a === 'android'
// 186 367 955.14 ops/s ± 0.37%
var a = 'Android'
a.toLowerCase() === 'android'
// 948 396 966.94 ops/s ± 0.68%
var a = 'Android'
a === 'android' || a === 'Android'
// 964 766 563.52 ops/s ± 0.23%
var a = 'Android'
a.toLowerCase() === 'android'
// 959 593 276.92 ops/s ± 0.18%
Казалось бы в первом случае, в примере с ||
, проверяется первое равенство и сразу возвращается результат, согласно кратким вычислениям. А во втором случае ещё должно второе равенство провериться, потом ||
и только потом результат вернуться, так что по идее второй случай, с ||
, должен быть медленнее первого, но получается наоборот! Второй случай быстрее почти в пять раз! Где тут собака зарыта? На toLowerCase
не обращайте внимания, хотел сравнить дизъюнкцию с ним, а получил неожиданные результаты и пришлось сравнивать уже дизъюнкции между собой!