Есть ли ряд вещей, которые должен знать каждый программист JavaScript, чтобы иметь возможность сказать «Я знаю JavaScript»?
Есть ли ряд вещей, которые должен знать каждый программист JavaScript, чтобы иметь возможность сказать «Я знаю JavaScript»?
Не 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 Fifth Edition функции , такие как indexOf
, forEach
и функционально-программные методы наArray
; как исправить старые браузеры, чтобы их можно было использовать; используя их со встроенными выражениями анонимных функций, чтобы получить компактный, читаемый код.
Поток управления между браузером и кодом пользователя; синхронное и асинхронное выполнение; события, которые возникают внутри потока управления (например, фокус), против событий и тайм-аутов, которые происходят, когда управление возвращается; как вызов якобы синхронного встроенного типа alert
может привести к потенциально катастрофическому повторному входу.
Как влияет межоконный сценарий instanceof
; как межоконный сценарий влияет на поток управления различными документами; как postMessage
надеюсь это исправить.
Смотрите этот ответ относительно последних двух пунктов.
Прежде всего, вы должны критически относиться к JavaScript, признавая, что по историческим причинам он является несовершенным языком (даже больше, чем большинство языков), и избегая его наихудших проблем. Работы Крокфорда в этой области определенно заслуживают прочтения (хотя я не на 100% согласен с ним в том, что такое «хорошие роли»).
this
зависит от того, как вы к нему обращаетесь . Попробуйте:var o= {b: function(){alert(this===o);}};
тогдаo['b']();
->true
. И если вы хотите действительно причудливый,(o['b'])()
->true
, но(c= o['b'])()
->false
, и только в Mozilla,(true? o['b'] : null)()
->true
. W, T, и действительно, F.Это можно отключить.
источник
Понимание материала, написанного в Javascript Крокфорда : «Хорошие части», является довольно хорошим предположением, что человек является достойным программистом JS.
Вы можете в значительной степени знать, как использовать хорошую библиотеку, такую как JQuery, и все еще не знать скрытые части Javascript.
Еще одно замечание - инструменты отладки в различных браузерах. Программист JS должен знать, как отлаживать свой код в разных браузерах.
Ой! И зная, что JSLint полностью обидит ваши чувства !!
источник
Если вы хотите быть настоящим ниндзя JavaScript, вы должны знать ответы на все вопросы в Совершенстве убивает JavaScript Quiz .
Пример для разжигания аппетита:
источник
Вы не знаете JavaScript, если не знаете:
источник
You don't know JavaScript if you don't know The W3C-DOM
. Две вещи разные...это javascript это не java :)
Многие, многие люди, начинающие с разработки сайтов, говорили мне, что javascript - это просто java!
источник
Ознакомьтесь с хотя бы одной библиотекой Javascript (Jquery, Prototype и т. Д.).
Узнайте, как использовать инструменты отладки основных браузеров (MSIE 7-8, Firefox, Chrome, Safari)
Читайте об индустрии: сайт Дугласа Крокфорда - это сокровище, а Ajaxian.com - хороший блог, чтобы следить за новыми, интересными или странными идеями для Javascript. Есть ряд других ресурсов, но это те, которые помогли мне больше всего.
источник
Javascript объекты и функции в качестве первого класса гражданина , обратных вызовов , чтобы не забыть о событиях , а затем JQuery .
источник
Этот Javascript - это не то, что можно узнать за час!
источник
Переменные являются глобальными, если они не объявлены как локальные !!
Плохо (DoSomething () вызывается только 10 раз):
Хорошо (DoSomething () вызывается 50 раз, как и предполагалось):
источник
for (var i=0;
всем своим петлямvar
верхнюю часть функции, потому что она не обманывает вас относительно размера области видимости переменной.js2-mode
будет жаловаться, если вы находитесьvar i
в двух отдельныхfor
циклах в одной и той же функции, поскольку она предполагает, что вы думаете, что у вас есть две отдельные переменные, а вы нет. Тем не менее, я стараюсь никогда неvar
отделять вещи от того, где я их инициализирую.Как использовать хорошие части, и как избежать ужасных частей .
источник
Для того, чтобы знать, что 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»:
источник
Этот 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. Поэтому я думаю, что оба вопроса в равной степени не имеют отношения к этому вопросу.
источник
JSLint http://www.JSLint.com/
источник
Прочитав все вышесказанное, это также прекрасно , чтобы узнать Javascript с помощью такой структуры , как JQuery. По правде говоря, это первый способ, которым многие люди подняли JS. В этом нет ничего постыдного.
источник
массив .
length
Метод - это не количество элементов массива, а самый высокий индекс. даже когда элемент был установлен наundefined
это поведение едва ли можно отличить от ошибки в дизайне языка.
источник
JQuery будет моей лучшей рекомендацией. Не только для самого кода, но и идиома, стиль, мышление, стоящее за ним, наиболее достойны эмуляции.
источник
Этот javascript является наиболее широко распространенным языком в мире. (Вероятно)
источник
Очень хорошее изучение языка и понимание его различных особенностей происходит из (многолетнего) опыта. Если вы хотите стать лучшим программистом, я бы сказал, понимая шаблоны проектирования, как и когда их использовать и / или даже когда вы их используете, не осознавая этого; техническая архитектура и пользовательский опыт.
Знание языка (JavaScript) означает, что вы можете выбрать любой фреймворк и использовать его по своему желанию. Вам неизбежно придется погрузиться в исходный код, и если все, что вы знаете, это синтаксис фреймворка или 2 или 3, то вы не будете далеко ходить. Сказать, что получение исходного кода нескольких различных фреймворков, вероятно, является одним из лучших способов увидеть, как можно использовать JavaScript. Поработайте, просматривая код в Firebug или Web Inspector, а затем проверяя документацию JavaScript, особенно документы Mozilla и Webkit, чтобы получить более полное представление о том, на что вы смотрите.
Понимая разницу между объектно-ориентированным и функциональным программированием, JavaScript - это привлекательное сочетание двух, а также того, когда и как использовать и то, и другое для создания потрясающей кодовой базы и потрясающих приложений, сделает вас лучшим программистом JavaScript.
Простое чтение некоторых книг, особенно «хороших частей» Крокфорда, в которых просто представлено его мнение о том, что хорошо в JavaScript, при этом пропуская большинство УДИВИТЕЛЬНЫХ частей JavaScript, может привести вас в замешательство.
Проверка кода, написанного кем-то вроде Томаса Фукса, с другой стороны, даст вам гораздо больше понимания возможности написания удивительного и эффективного JavaScript.
Попытка запомнить несколько ошибок или WTF не очень поможет, вы поймете это, если начнете кодировать и проходить код библиотеки / фреймворков, особенно с комментариями, чтобы понять, почему они использовали определенные свойства / значения, а не другие, почему и когда хорошо использовать определенные операнды и операторы, все это есть в коде, который используют люди фреймворка. Как лучше, чем учиться на примере? : ^)
источник
В Javascript производительность имеет значение.
Не существует интеллектуального компилятора для оптимизации вашего кода, поэтому вы должны быть более осторожны при написании кода JavaScript, чем такие языки, как C #, Java ...
источник
объектные литералы, потому что их так приятно писать.
источник
Следующие вещи также важны:
1) Переменный подъем. 2) Область видимости цепей и объектов активации.
и тогда такие вещи :)
3) wtfjs.com
4) все является объектом http://www.lifeinafolder.com/images/Js.jpg
источник
with()
и где провести черту.throw
оператора, чтобы преднамеренно остановить выполнение Javascript.источник
JavaScript не поддерживает разделение возврата ключевого слова и оператор возврата с символом новой строки , как следующий код (или попробовать его на моей странице jsFiddle )
Я не понимаю, почему JavaScript не поддерживает этот стиль, потому что намного проще читать очень сложный исходный код JavaScript, если сравнивать со стилем JavaScript по умолчанию.
PS. Я написал JavaScript почти 6 лет. Но я только что обнаружил эту ошибку при попытке выполнить следующую функцию. Всегда возвращает undefined. Когда я использую отладчик и вхожу в эту функцию, все работает нормально. Я думаю, что это должно быть худшей ошибкой программирования в моей жизни.
источник
var foo = "bar" +
читает) анализатор.var foo = 5
и-1;
приведет к Foo, установленным на 4, хотя каждый уважительных заявления сами по себе.Поскольку JS является функциональным языком, порядочный JS-программист должен уметь писать Y-комбинатор и объяснять, как он работает на пределе возможностей.
источник
... о Google Web Toolkit , что означает, что ваш проект javascript, вероятно, мог бы быть разработан более удобным способом.
источник