Что должен знать каждый программист JavaScript?

Есть ли набор вещей, которые должен знать каждый программист JavaScript, чтобы иметь возможность сказать "Я знаю JavaScript"?

30 ответов

Решение

Не JQuery. Не YUI. Не (и т. Д. И т. П.)

Фреймворки могут быть полезны, но они часто скрывают некрасивые детали того, как на самом деле работают JavaScript и DOM от вас. Если ваша цель состоит в том, чтобы сказать "Я знаю JavaScript", то мы тратим на это много времени.

Вот некоторые особенности языка JavaScript, которые вы должны знать, чтобы понять, что он делает, и не быть пойманными, но которые не сразу очевидны для многих людей:

  • Тот object.prop а также object['prop'] это то же самое (так что вы можете перестать использовать eval, Спасибо); свойства объекта всегда являются строками (даже для массивов); какие for ... in длячто это не так).

  • Недвижимость обнюхивать; какие undefined есть (и почему пахнет); почему, казалось бы, малоизвестный in Оператор выгоден и отличается от typeof / undefined чеки; hasOwnProperty; цель delete,

  • Что Number тип данных действительно является плавающим; не зависящие от языка трудности использования поплавков; избегая parseInt восьмеричная ловушка

  • Определение вложенной функции; необходимость использования var в объеме вы хотите избежать случайных глобалов; как можно использовать прицелы для укупорки; проблема замкнутого цикла.

  • Как глобальные переменные и window свойства сталкиваются; как глобальные переменные и элементы документа не должны сталкиваться, а происходят в IE; необходимость использования var в глобальном масштабе, чтобы избежать этого.

  • Как function оператор действует, чтобы " поднять " определение перед кодом, предшествующим ему; разница между функциональными операторами и функциональными выражениями; почему выражения именованных функций не должны использоваться.

  • Как функционирует конструктор prototype собственность и new оператор действительно работает; методы использования этого для создания нормальной системы класса / подкласса / экземпляра, которую вы на самом деле хотели; когда вы можете захотеть использовать объекты на основе замыкания вместо прототипирования. (Большинство учебных материалов по JS абсолютно ужасны в этом отношении; мне потребовались годы, чтобы разобраться в этом.)

  • Как this определяется во время разговора, не связано; следовательно, передача методов не работает так, как вы ожидаете от других языков; как замыкания или Function#bind может быть использован, чтобы обойти это.

  • Другие функции пятого издания ECMAScript, такие как indexOf, forEach и методы функционального программирования на Array; как исправить старые браузеры, чтобы убедиться, что вы можете их использовать; используя их со встроенными выражениями анонимных функций, чтобы получить компактный, читаемый код.

  • Поток управления между браузером и кодом пользователя; синхронное и асинхронное выполнение; события, которые возникают внутри потока управления (например, фокус), против событий и таймаутов, которые происходят, когда управление возвращается; как называется якобы синхронный встроенный alert может привести к потенциально катастрофическому повторному въезду.

  • Как кросс-оконные скрипты влияют instanceof; как межоконный сценарий влияет на поток управления различными документами; как postMessage надеюсь, это исправит.

Смотрите этот ответ относительно последних двух пунктов.

Прежде всего, вы должны критически относиться к JavaScript, признавая, что по историческим причинам он является несовершенным языком (даже больше, чем большинство языков), и избегая его наихудших проблем. Работы Крокфорда в этой области определенно заслуживают прочтения (хотя я не на 100% согласен с ним в том, что такое "хорошие роли").

Это можно отключить.

Понимание материала, написанного в Javascript Крокфорда : "Хорошие части", является довольно хорошим предположением, что человек является достойным программистом JS.

Вы можете в значительной степени знать, как использовать хорошую библиотеку, такую ​​как JQuery, и все еще не знать скрытые части Javascript.

Еще одно замечание - инструменты отладки в различных браузерах. Программист JS должен знать, как отлаживать свой код в разных браузерах.

Ой! И зная, что JSLint полностью обидит вас!!

Если вы хотите быть настоящим ниндзя JavaScript, вы должны знать ответы на каждый вопрос в http://perfectionkills.com/javascript-quiz/.

Пример для разжигания аппетита:

(function f(f){ 
  return typeof f(); 
})(function(){ return 1; });

Что возвращает это выражение?

  • "число"
  • "Неопределенные"
  • "Функция"
  • ошибка

Вы не знаете JavaScript, если не знаете:

  1. Затворы
  2. Основанное на прототипе наследование
  3. Шаблон модуля
  4. W3C-DOM
  5. Как работают события

..это javascript это не java:)

Многие, многие люди, начинающие с разработки сайтов, говорили мне, что javascript - это просто java!

  1. Ознакомьтесь с хотя бы одной библиотекой Javascript ( Jquery, Prototype и т. Д.).

  2. Узнайте, как использовать инструменты отладки основных браузеров ( MSIE 7-8, Firefox, Chrome, Safari)

  3. Читайте об индустрии: сайт Дугласа Крокфорда - это сокровище, а Ajaxian.com - хороший блог, чтобы быть в курсе новых, интересных и необычных идей для Javascript. Есть ряд других ресурсов, но это те, которые помогли мне больше всего.

Javascript объекты и функции первоклассного гражданина, обратные вызовы, чтобы не забывать о событиях, а затем JQuery.

Этот Javascript - это не то, что можно узнать за час!

Переменные являются глобальными, если они не объявлены как локальные!!

Плохо (DoSomething() вызывается только 10 раз):

function CountToTen()
{
  for(i=0; i< 10; i++)
  {
    DoSomething(i);
  }
}

function countToFive()
{
  for(i=0; i<5; i++)
  {
    CountToTen();
  }
}

CountToFive();

Хорошо (DoSomething() вызывается 50 раз, как и предполагалось):

function CountToTen()
{
  var i;
  for(i=0; i< 10; i++)
  {
    DoSomething(i);
  }
}

function countToFive()
{
  var i;
  for(i=0; i<5; i++)
  {
    CountToTen();
  }
}

CountToFive();

Для того, чтобы знать, что Javascript первоначально назывался LiveScript, а префикс "Java" был прикреплен в маркетинговых целях, а не потому, что Java и Javascript связаны (а это не так).

Да, и за то, что вы владеете любой версией "Javascript: Полное руководство" Дэвида Фланагана (эта информация на странице 2).

... и за то, что оценили тех, кто раньше пытался запутать документ Internet Explorer 4 document.all[] и Netscape Navigator 4 document.layers[] до того, как подобные Jquery убрали боль.

РЕДАКТИРОВАТЬ:

Как отмечает @Kinopiko, JavaScript изначально назывался проектом Mocha ( некоторые источники также считают, что он назывался проектом LiveWire), но общепринято, что язык (написанный Бренданом Эйхом) планировалось выпустить как LiveScript до того, как префикс Java был принят в выпуск в начале 1996 года.

Нужно знать о следующем, чтобы сказать "Я знаю JavaScript":

  1. JavaScript это хорошо, но DOM - это больно
  2. Кросс-браузерные проблемы могут заставить вас сойти с ума
  3. Если код не протестирован как минимум в 4 разных хороших браузерах, вы не можете сказать, что он не содержит ошибок
  4. Закрытие.............. Должен знать
  5. Его основанный на прототипе........... Хороший, это интересно узнать это
  6. ключевое словоотладчика..... помогает в кризис

Этот JavaScript намного отличается от других языков, чем вы думаете. Посмотрите этот великолепный Google Tech Talk, чтобы получить представление: http://www.youtube.com/watch?v=hQVTIJBZook

Что должен знать каждый кодировщик JavaScript?

Как насчет, я могу отключить ваши усилия в 2 клика. Так что предоставьте запасной вариант, если это возможно.

Я настоятельно рекомендую прочитать Javascript: The Good Parts

Вы знаете javascript, если вы можете эффективно использовать Array, Number, String, Date и Object. Плюс очки по математике и регулярному выражению. Вы должны быть в состоянии писать функции и использовать переменные (в правильной области видимости, то есть как "методы" объекта).

Я вижу некоторые комментарии о знании замыканий, экстравагантный синтаксис функций, блабла. Все это не имеет отношения к этому вопросу. Это все равно что сказать, что вы бегун, если вы можете пробежать 100 м за 11 секунд.

Я говорю, что, возможно, потребуется несколько недель, чтобы стать опытным в JavaScript. После этого требуются годы, десятки книг и тысячи строк программирования, чтобы стать экспертом, ниндзя и т. Д.

Но это был не вопрос.

Да, и DOM не является частью javascript и jQuery. Поэтому я думаю, что оба вопроса одинаково не имеют отношения к этому вопросу.

Прочитав все вышеизложенное, вы также отлично изучите Javascript, используя такую ​​среду, как jQuery. По правде говоря, это первый способ, которым многие люди подняли JS. В этом нет ничего постыдного.

массив.length Метод - это не количество элементов массива, а самый высокий индекс. даже когда элемент был установлен на undefined

var a = [];
a.length;   // === 0
a[10];      // === undefined
a[10] = undefined;
a.length;   // === 11
a.pop();    // === undefined
a.length;   // === 10

это поведение едва ли можно отличить от ошибки в дизайне языка.

JQuery будет моей лучшей рекомендацией. Не только для самого кода, но и идиома, стиль, мышление, стоящее за ним, наиболее достойны эмуляции.

Очень хорошее изучение языка и понимание его различных особенностей происходит из (многолетнего) опыта. Если вы хотите стать лучшим программистом, я бы сказал, понимая шаблоны проектирования, как и когда их использовать и / или даже когда вы их используете, не осознавая этого; техническая архитектура и пользовательский опыт.

Знание языка (JavaScript) означает, что вы можете выбрать любой фреймворк и использовать его по своему желанию. Вам неизбежно придется погрузиться в исходный код, и если все, что вы знаете, это синтаксис фреймворка или 2 или 3, то вам далеко не уйти. Сказать, что получение исходного кода нескольких различных фреймворков, вероятно, является одним из лучших способов увидеть, как можно использовать JavaScript. Поработайте, просматривая код в Firebug или Web Inspector, а затем проверяя документацию JavaScript, особенно документы Mozilla и Webkit, чтобы получить более полное представление о том, на что вы смотрите.

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

Простое чтение некоторых книг, особенно "хороших частей" Крокфорда, в которых просто представлено его мнение о том, что хорошо в JavaScript, при этом пропуская большинство УДИВИТЕЛЬНЫХ частей JavaScript, может привести вас в замешательство.

Изучение кода, написанного кем-то вроде Томаса Фукса, с другой стороны, даст вам гораздо больше понимания возможности написания удивительного и эффективного JavaScript.

Попытка запомнить несколько ошибок или WTF тоже не очень поможет, вы поймете это, если начнете кодировать и проходить код библиотеки / фреймворков, особенно с комментариями, чтобы понять, почему они использовали определенные свойства / значения, а не другие, почему и когда хорошо использовать определенные операнды и операторы, все это есть в коде, который используют люди фреймворка. Как лучше, чем учиться на примере?:^)

Этот javascript является наиболее широко распространенным языком в мире. (Наверное)

В Javascript производительность имеет значение.

Нет интеллектуального компилятора для оптимизации вашего кода, поэтому вы должны быть более осторожны при написании кода JavaScript, чем такие языки, как C#, Java...

Объектные литералы, потому что их так приятно писать.

Следующие вещи также важны:

1) Переменный подъем. 2) Область видимости цепей и объектов активации.

и тогда такие вещи:)

3) http://www.wtfjs.com/

4) http://www.lifeinafolder.com/images/Js.jpg

  1. Зная, что есть жизнь с и без with() и где провести черту.
  2. Вы можете создавать собственные ошибки с помощью throw заявление, чтобы преднамеренно остановить выполнение Javascript.

JavaScript не поддерживает разделение ключевого слова return и оператора return с символом новой строки, как в следующем коде (или попробуйте на моей странице jsFiddle)

function foo()
{
    return
    {
        bar: 'something'
    };
}

$(function()
{
    document.write(foo());
});

Я не понимаю, почему JavaScript не поддерживает этот стиль, потому что намного проще читать очень сложный исходный код JavaScript, если сравнивать со стилем JavaScript по умолчанию.

PS. Я написал JavaScript почти 6 лет. Но я только что обнаружил эту ошибку при попытке выполнить следующую функцию. Всегда возвращает undefined. Когда я использую отладчик и вхожу в эту функцию, все работает нормально. Я думаю, что это должно быть худшей ошибкой программирования в моей жизни.

function JqGridInlineEditor_GenerateTool(cellvalue, options, rowObject, disableEdit, disableDelete)
{
    return 
        (!disableEdit ? '<a class="button edit" href="javascript: void(0);" onclick="JqGridInlineEditor_EditRow(this, \'{0}\');return false;" title="{2}"><img src="{1}" alt="{2}" /></a>'.format(options.rowId, getUrl('~/Content/Icons/Edit.gif'), 'Click here to Edit or \nDouble-click row to edit.') : '') +
        (!disableDelete ? '<a class="button delete" href="javascript: void(0);" onclick="JqGridInlineEditor_DeleteRow(this, \'{0}\');return false;" title="{2}"><img src="{1}" alt="{2}" /></a>'.format(options.rowId, getUrl('~/Content/Icons/Delete.png'), 'Click here to Delete or \nSelect row and then press Delete') : '') +
        (!disableEdit ? '<a class="button save" style="display:none" href="javascript: void(0);" onclick="JqGridInlineEditor_SaveRow(this, \'{0}\');return false;" title="{2}"><img src="{1}" alt="{2}" /></a>'.format(options.rowId, getUrl('~/Content/Icons/Save.png'), 'Click here to Save or \nPress Enter') : '') +
        (!disableEdit ? '<a class="button cancel" style="display:none" href="javascript: void(0);" onclick="JqGridInlineEditor_RestoreRow(this, \'{0}\');return false;" title="{2}"><img src="{1}" alt="{2}" /></a>'.format(options.rowId, getUrl('~/Content/Icons/Cancel.png'), 'Click here to Cancel or \nPress Esc') : '');
}

Поскольку JS - это функциональный язык, порядочный JS-программист должен уметь писать Y-комбинатор и объяснять, как он работает на пределе возможностей.

... о Google Web Toolkit, что означает, что ваш проект javascript, вероятно, мог бы быть разработан более удобным способом.

Другие вопросы по тегам