2009-02-28 3 views
5

Используя крошечный DiggIt/Блог особенность StackOverflow описан here:Понимания JavaScript - Ресурс

Я хотел бы, чтобы отправить следующий Google технологию разговор видео, которое я только что видел и что я нашел весьма интересный.

У меня всегда были проблемы с пониманием javascript «природа».

Здесь JavaScript good parts описаны Дугласом Crockford

Я надеюсь, что вы найдете ссылку полезной.

Теперь вопрос часть:

Каковы ваши жалобы на JavaScript? Вы используете IDE для редактирования javascript? Считаете ли вы, что это видео помогает понять «хорошие детали»?

ответ

17

JavaScript: плохие детали.

  1. Самая большая ошибка - позднее обнаружить ошибку. JavaScript с радостью позволит вам получить доступ к несуществующему объекту или передать неправильное количество аргументов функции и заполнить пробел «неопределенными» объектами, которые, если вы не намеренно проверяете их (что нецелесообразно продолжать везде), вызовет исключение или сгенерирует неожиданное значение позже. Возможно, намного позже, в результате возникают тонкие и трудно отлаживаемые ошибки, которые появляются почти рядом с фактическим кодом проблемы. Эти условия должны были генерировать исключения, за исключением того, что у JS первоначально не было исключений для повышения. «Undefined» - это быстрый и грязный хак, с которым мы теперь застряли.

  2. Необъявленные переменные по умолчанию для глобальной области. Это почти никогда не то, что вы хотите, и может вызывать тонкие и трудно отлаживаемые ошибки, когда две функции забывают «var» и начинают использовать один и тот же глобальный.

  3. Модель функций конструктора является странной даже для языка на основе прототипа-OO и смущает даже опытных пользователей. Забытие «нового» может привести к тонким и трудно отлаживаемым ошибкам. Пока вы можете сделать из этого классную систему класса/экземпляра, стандартного нет, и большинство систем классов, предложенных в ранних учебниках, которые люди все еще используют, отчаянно неадекватны и запутывают то, что на самом деле делает JavaScript.

  4. Отсутствие связанных методов. Совершенно неинтуитивно, что доступ к «object.method» при вызове его делает магическое соединение с «объектом» в «этом», но передача «object.method» в качестве ссылки теряет соединение; ни один другой язык не работает таким образом. Когда это произойдет, «this» установлен на неожиданное значение, но это не «неопределенный» или что-то еще, что вызовет исключение. Вместо этого все доступ к свойствам заканчивается «окном», что приводит к более тонким и трудно отлаживаемым ошибкам.

  5. Не существует целочисленного типа. Число выглядит как одно, но разрывается различными способами (например, n + 1 == n для достаточно высокого n). Каждый раз, когда NaN или Infinity пробираются (совершенно неожиданно, если вы думаете, что имеете дело с целыми числами), вы не узнаете сразу; вместо этого на линии появятся тонкие и трудно отлаживаемые ошибки.

  6. Не существует ассоциативного типа массива. Объект выглядит как один, но разбивается на различные неожиданные ключи. Массивы не являются чистыми списками. Каждый раз, когда вы когда-либо используете «для ... в», вы, вероятно, попали в ловушку и испытаете ... да, тонкие и трудно отлаживаемые ошибки.

  7. Вообще-то плохое управление строками, по крайней мере, для языка сценариев. String.split (, limit) и String.replace() не делают то, что вы думаете, вызывая ... вы знаете. Результаты toString() обычно являются плохими и не полезны для отладки. Между тем мы застряли с мусором, который, по мнению Netscape, может быть полезен, например String.prototype.blink() и постоянно сломанным escape(). Ура.

  8. И тогда есть все различия браузеров (IE по-прежнему не хватает много существенных методов на основных объектах), а DOM ...

  9. И, наконец, даже если исключение действительно происходит , он скрыт от взгляда, поэтому автор даже не поймет, что что-то не так. В результате большинство сайтов переполнены ошибками; включите полную проверку ошибок JavaScript в IE, и результат будет непригодным.

Меня пугает мысль о том, что новое поколение программистов изучает этот тош как первый язык. Хуже того, большая часть учебного материала, из которого они учатся («My fiRST AEWsome R0LL0VERZ!») Неизменно поощряет худшую возможную практику. 'Javascript:' URLs, 'eval()' для всего, доступный для браузера DOM-доступ ... oy.

+0

+1 для упоминания о невыполнении обязательств глобальными :-) – bandi

+0

Лучше, чем изучение C, или базовый как первый язык. – Breton

1

Твердая часть о JavaScript, на мой взгляд, является:

  1. Кросс-браузер/доводка вопросы
  2. вопросы
  3. Cross браузер дом/модель (событие кипящий, и т.д ...)
  4. Отсутствия «классы» (субъективные)
  5. отсутствия хорошей твердой поддержки отладки в браузерах

Firebug помогает много для FireFox, но я не нашел ничего хорошего для IE - и тот факт, что каждый из нас должен быть сложным.

С яркой стороны, если вы строите сценарий с нуля и понимаете каждый шаг, это может быть действительно приятным и мощным.

+0

В JS есть много реализаций классов, если вы занимаетесь такими вещами. Мне нравится прототипное наследование. – Zach

1

Моя самая большая жалоба при использовании JavaScript - это привязки DOM, но на самом деле это не ошибка JavaScript, так как каждый браузер реализует ее по-своему. Вдоль этих строк IE является худшим нарушителем.

С точки зрения чисто ошибок JavaScript я все еще не полностью прототипирую прототипы таким образом, чтобы я мог использовать его полную мощность; но это менее жалоба, чем моя личная неудача. Как язык мне очень нравится JavaScript, и любые жалобы, которые у меня на нем, омрачены его взаимодействием с DOM.

Я использую Firefox + Firebug интенсивно для моего основного кодирования и отладки. В Opera и Safari есть отладчики, которые я использую, если в браузере возникают определенные проблемы. Небеса помогают мне, когда мне нужно отлаживать IE.

Я код в любом текстовом редакторе доступен и имеет подсветку синтаксиса. Я склонен использовать структуру YUI, но это только потому, что я знаю, что это лучше всего; Я надеюсь когда-нибудь узнать больше о других рамках и решить, что лучше всего подходит для личных проектов.

Пока я не видел видео, на этой неделе я просто прочитал «Хорошие детали». Если видео ничего похоже на книгу, это будет очень полезно. Сама книга великолепна, потому что она краткая и информативная. Он переходит на уровень языковой дискуссии, что недостаточно часто видно, когда Googling для информации, что дает лучшее понимание языка в целом.

0

Мне очень нравится прототипирование, оно чувствует себя намного мощнее, чем обычные классы.

Смежные вопросы