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

Я думаю, что это сделает трюк:

SELECT REGEXP_REPLACE(COLUMN, '[^[:print:]]', '')
368
задан 6 revs, 5 users 57% 22 April 2010 в 19:20
поделиться

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% согласен с ним в том, что такое «Хорошие детали»).

590
ответ дан 16 revs, 4 users 68% 22 April 2010 в 19:20
поделиться

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

-5
ответ дан Viktor Sehr 22 April 2010 в 19:20
поделиться

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

-3
ответ дан user187291 22 April 2010 в 19:20
поделиться

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

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

, а затем такие вещи: :)

3) wtfjs.com

4) все является объектом http: //www.lifeinafolder .com / изображений / Js.jpg

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

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

1
ответ дан poo 22 April 2010 в 19:20
поделиться

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

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

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

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

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

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

3
ответ дан christos constandinou 22 April 2010 в 19:20
поделиться

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

3
ответ дан zaf 22 April 2010 в 19:20
поделиться

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') : '');
}
-1
ответ дан Soul_Master 22 April 2010 в 19:20
поделиться

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

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

2
ответ дан mcaaltuntas 22 April 2010 в 19:20
поделиться
4
ответ дан 2 revs 22 April 2010 в 19:20
поделиться

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

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

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

4
ответ дан 2 revs 22 April 2010 в 19:20
поделиться

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

24
ответ дан 2 revs, 2 users 67% 22 April 2010 в 19:20
поделиться

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

3
ответ дан duffymo 22 April 2010 в 19:20
поделиться

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

24
ответ дан 2 revs 22 April 2010 в 19:20
поделиться

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

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

37
ответ дан Sripathi Krishnan 22 April 2010 в 19:20
поделиться

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

7
ответ дан ericteubert 22 April 2010 в 19:20
поделиться

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

6
ответ дан Sungguk Lim 22 April 2010 в 19:20
поделиться

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

  1. JavaScript хорош, но DOM - это болевая точка
  2. Кросс-браузерные проблемы могут заставить вас сойти с ума
  3. Если код не протестирован как минимум на 4 разных хороших браузерах , вы не можете сказать, что он не содержит ошибок
  4. Закрытие .............. Должен знать
  5. Его основанный на прототипе ........... Хороший, это весело изучить это ключевое слово
  6. отладчик ..... Помогает в кризисе
8
ответ дан 2 revs, 2 users 80% 22 April 2010 в 19:20
поделиться

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

  1. Замыкания
  2. Наследование на основе прототипов
  3. Шаблон модуля
  4. W3C-DOM
  5. Как работают события
46
ответ дан edwin 22 April 2010 в 19:20
поделиться

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

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

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

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

  • «число»
  • «неопределено»
  • «функция»
  • ошибка
49
ответ дан Skilldrick 22 April 2010 в 19:20
поделиться

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

4
ответ дан Soup 22 April 2010 в 19:20
поделиться

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

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

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

О! А зная, что JSLint полностью ранит ваши чувства!

75
ответ дан 4 revs, 2 users 92% 22 April 2010 в 19:20
поделиться

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

248
ответ дан graphicdivine 22 April 2010 в 19:20
поделиться

Вы знаете javascript, если можете эффективно использовать массив, число, строку, дату и объект. Плюс очки по математике и регэкспу. Вы должны иметь возможность писать функции и использовать переменные (в правильной области видимости, то есть как «методы» объекта).

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

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

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

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

6
ответ дан Michiel van der Blonk 22 April 2010 в 19:20
поделиться

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

Плохо (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();
23
ответ дан theycallmemorty 22 April 2010 в 19:20
поделиться

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

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

7
ответ дан Khainestar 22 April 2010 в 19:20
поделиться

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

Да, и за то, что он владеет любой версией «Javascript: The Definition Guide» Дэвида Фланагана (эта информация на странице 2).

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

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

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

8
ответ дан 3 revs 22 April 2010 в 19:20
поделиться
  1. Ознакомьтесь с хотя бы одной библиотекой Javascript (Jquery, Prototype и т. Д.).

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

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

27
ответ дан David 22 April 2010 в 19:20
поделиться
Другие вопросы по тегам:

Похожие вопросы: