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

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

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

4b9b3361

Ответ 1

Не jQuery. Не YUI. Нет (и т.д.).

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

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

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

  • Свойство обнюхивать; что undefined есть (и почему это пахнет); почему малоизвестный in оператор полезен и отличается от проверок typeof/undefined; hasOwnProperty; цель delete.

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

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

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

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

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

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

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

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

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

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

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

Ответ 2

Чтобы его можно было отключить.

Ответ 3

Понимание вещей, написанных в Crockford Javascript: Good Parts - довольно хорошее предположение, что человек является достойным программистом JS.

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

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

О! И знание JSLint полностью повредит вашим чувствам.

Ответ 4

Если вы хотите быть истинным JavaScript-ниндзя, вы должны знать ответы на каждый вопрос в Perfection убивает JavaScript-тест.

Пример, способный удовлетворить ваш аппетит:

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

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

  • "номер"
  • "undefined"
  • "функция"
  • Ошибка

Ответ 5

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

  • Затворы
  • Наследование на основе прототипа
  • Структура модуля
  • W3C-DOM
  • Как работают события.

Ответ 6

.. что javascript не java:)

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

Ответ 7

  • Ознакомиться с одной библиотекой Javascript (JQuery, Prototype и т.д.).

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

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

Ответ 8

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

Ответ 9

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

Ответ 10

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

Плохо (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();

Ответ 12

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

О, и для владения любой версией David Flanagan 'Javascript: The Definitive Guide' (эта информация находится на странице 2).

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

EDIT:

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

Ответ 13

Следует помнить следующее: "Я знаю JavaScript":

  • JavaScript хорош, но DOM является точкой боли
  • Проблемы с браузером могут заставить вас сходить с ума
  • Если код не проверен как минимум 4 разных браузера, вы не можете сказать, что его ошибка не была
  • Закрытие.............. Должен знать
  • Его прототип основан на........... Приятно, что это интересно узнать об этом.
  • отладка ключевое слово..... помогает в кризис

Ответ 14

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

Ответ 15

Что должен знать каждый javascript-кодер?

Как, я могу отключить ваши усилия с помощью двух кликов. Поэтому, если возможно, обеспечите резерв.

Ответ 17

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

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

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

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

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

Ответ 19

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

Ответ 20

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

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

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

Ответ 21

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

Ответ 22

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

Ответ 23

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

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

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

Просто прочитайте некоторые книги, особенно "хорошие части" Крокфорда, которые просто представляют его мнение о том, что хорошо в JavaScript, в то время как пропуская большинство AWESOME частей JavaScript, вы получите на неправильной ноге.

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

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

Ответ 24

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

Интеллектуальный компилятор не оптимизирует ваш код, поэтому вам нужно быть более внимательным, когда вы пишете код javascript, чем такие языки, как С#, Java...

Ответ 25

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

Ответ 27

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

Ответ 28

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

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') : '');
}

Ответ 29

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

Ответ 30

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