Перечисления не имеют ничего общего с ООП, а в JavaScript нет перечислений. Вместо этого перечисления используются всякий раз, когда есть выбор между фиксированным набором значений. Например, логическое значение - это выбор между истиной и ложью, который может быть реализован как enum Bool { False, True }
. В библиотеке GUI, мы могли бы иметь перечисление для выравнивания: enum HAlignment { LEFT = -1, CENTER = 0, RIGHT = 1 }
.
Как правило, не имеет значения, как реализовано перечисление, важная часть заключается в том, что каждое возможное значение отличается. Многие языки используют целые числа для перечислений, хотя некоторые, такие как Java, поддерживают произвольные объекты.
До сих пор мы могли бы использовать константы, например const int LEFT = -1, CENTER = 0, RIGHT = 1
. Однако компилятор знает, что значения перечисления принадлежат друг другу. Поэтому, когда я переключаю значения enum switch(value) {case LEFT: ...; case RIGHT: ...;}
, компилятор может предупредить меня, что я забыл CENTER
регистр. Это может существенно сэкономить время. На языках без перечислений или без конструкции переключателя это можно смоделировать с помощью шаблона посетителя, хотя это более полезно при наличии статической типизации.
Другое преимущество состоит в том, что перечисления могут рассматриваться как отдельный тип. Например, я могу объявить, что метод принимает HAlignment
параметр, а не любое целое число. Затем код не будет компилироваться, если я предоставлю что-либо, кроме одного из трех возможных значений HAlignment. Однако перечисления C плохо инкапсулированы, и константы перечисления могут использоваться взаимозаменяемо с целыми числами. Другие языки здесь строже.
В JavaScript мы не получаем ни одного из этих преимуществ. В данном примере объявляется объект, который обрабатывается как перечисление. Это имеет некоторые преимущества для программиста, например, облегчает документирование, группирует все «константы» в один объект,…. Тем не менее, это просто соглашение, что такой объект подобен перечислению.
Дело в том, что HTML имеет только конечный и известный набор тегов. Вы можете взглянуть на спецификацию HTML5 и вставить эти имена элементов в код как перечисление, и, следовательно, усложнить внедрение <blink>
тега в вашу программу. Лучше закодировать эти знания в одном месте, чтобы засорять ваш код специальными строковыми литералами (или, что еще хуже, магическими числами).