JavaScript, также известный как Mocha, или LiveScript, или JScript или ECMAScript один из самых популярных языков программирования. Фактически каждый персональный компьютер имеет его интерпретатор и активно им пользуется. JavaScript всецело обязан своей популярностью тому, что он стал основным скриптовым языком для веба.
Несмотря на его популярность, немногие знают, что JavaScript — это очень хороший
Название
Префикс «Java-» намекает на то, что он является подмножеством или упрощенной версией Java. Судя по всему это название выбрали специально, чтобы создать неразбериху, а из нее выходит непонимание. JavaScript — это не интерпретируемая Java. Java — это интерпретируемая Java. JavaScript — это другой язык.
Синтаксис JavaScript настолько же похож на синтаксис Java, как Java на C. И он является подмножеством Java не в большей степени, чем Java является подмножеством C. Он лучше чем Java в приложениях, для которых Java (тогда называвшаяся Oak) изначально разрабатывалась.
JavaScript не был создан Sun Microsystems, создателями Java. JavaScript был разработан в Netscape. Изначально он назывался LiveScript, но это название не настолько сбивало с толку.
Суффикс "-Script" подразумевает, что это не настоящий программирования, что скриптовый язык это значительно хуже, чем язык программирования. Но в действительности все зависит от специализации. По сравнению с C, JavaScript жертвует скоростью ради выразительных возможностей и динамичности.
Lisp в шкуре C
JavaScript имеет
Типизируемость
JavaScript разрабатывался, чтобы работать в Netscape Navigator. Его успех сделал его составной частью всех браузеров. Это вылилось в свободную типизацию. JavaScript — это Джордж Ривз среди языков программирования. JavaScript неплохо подходит для огромного числа не
Движущаяся цель
Первые версии JavaScript были достаточно слабыми. В них не хватало обработки исключений, вложенных функций и наследования. Сейчас это полностью
Комитет ECMA, который занимается разработкой расширений к языку, несмотря на хорошие намерения, создал одну из самых его больших проблем: сделано и так слишком много его версий. Это создает путаницу.
Ошибки в дизайне
Ни один язык программирования не идеален. JavaScript имеет свои ошибки в дизайне, вроде перегрузки оператора "+", который значит одновременно сложение и конкатенацию с приведением типов, и частый источник ошибок — оператор with, которого лучше всего избегать. Политики для зарезервированных слов слишком строги. Использование точки с запятой было огромной ошибкой, также как и прямая запись в коде регулярных выражений. Эти ошибки привели к ошибкам при программировании, и поставили весь дизайн языка под вопрос. К счастью, большинства из этих проблем можно избежать при помощи хорошего стиля программирования.
Проблемы в дизайне вполне очевидны. Удивительно, но комитет ECMAScript не выражает никакой заинтересованности, чтобы его исправить. Возможно, они хотят создать новый язык.
Плохая реализация
Первые реализации JavaScript были достаточно глючные. Это плохо отразилось на языке. К тому же их встраивали в очень глючные браузеры.
Плохие книги
Честно говоря, все книги по JavaScript просто ужасны. Они содержат ошибки, плохие примеры и дают плохие инструкции. Важные возможности языка плохо объясняются, если объясняются вообще. Я прочитал дюжину книг по JavaScript и могу рекомендовать
Двойные стандарты
Официальная спецификация к языку написана ECMA. И она просто ужасного качества. Её сложно читать и ещё сложнее там
Программисты
Большинство людей, которые пишут на JavaScript, не являются программистами вообще. Оне не обладают нужными знаниями и терпением, чтобы писать хорошие программы. Но в любом случае JavaScript имеет настолько сильную выразительную мощь, что и они могут сделать
Объектно-ориентированный язык
Два основных пути построения объектной системы — это наследования (являться кем-то) и аггрегация (иметь что-то). JavaScript может всё это, но его динамическая натура позволяет превосходить агрегацию.
Один из аргументов в пользу того, что JavaScript — не
Но, оказывается, объекты в JavaScript могут иметь закрытые переменные и методы. Конечно, только некоторые это понимают, потому что JavaScript — это самый непонятный язык программирования в мире.
Ещё одним аргументом является то, что JavaScript не поддерживает наследование. В действительности JavaScript поддерживает не только классическое наследование, но и другие способы повторного использования кода.
Post Scriptum: да, статья достаточно большая и старая, но прочитать её стоит, особенно в связи с разработкой JavaScript 2.
Update: Спасибо Outspector за огромное количество исправлений.