+ 1 к Энни о тестах производительности.
Но я бы пошел с
return lookup[match] || match;
Это не только одно извлечение свойства (а не - запрет на оптимизацию - два, как в ваших предыдущих примерах), но также оно короче и (это не всегда верно для более короткого кода) понятнее любому полуопытному JavaScript-кодеру. Это будет немного бросать новичков, но одной из первых вещей, которую вы хотите научить новичков, является то, как специальные (и превосходные) ||
и &&
работают в JavaScript, поэтому ...
В некоторых реализациях он также работает с парой (очень) крайних случаев. (Пример: 'toString' in {}
должно быть true
[все объекты наследуют toString
от Object
прототипа], но это false
в Microsoft JScript.)
Относительно оптимизации: за исключением явно очевидного (не делайте условие вашего цикла функцией, которая должна считать вещи, если она может быть инвариантом, избегайте ненужного дублирования поисков), даже в отсутствие общего обсуждения того, стоит ли беспокоиться Этот материал, прежде чем вы увидите проблему (иногда называемую «преждевременной оптимизацией»), особенно актуален для JavaScript для общего веба. Разные микрооптимизации имеют разные результаты в разных реализациях, иногда противоречивые результаты («А» лучше в Internet Explorer, но гораздо хуже в FireFox и наоборот). В основном это вопрос ожидания, пока вы не увидите конкретную проблему, а затем решите эту конкретную проблему.
Я предпочитаю простоту и ясность, если только у меня нет веских оснований полагать, что что-то более грубое даст мне ощутимое улучшение в реальном мире.