JavaScript, очевидно, стал довольно незаменимым; однако, я все еще новичок в этом, и я обнаружил, что трудно бороться с чувством, что это кажется таким беспорядком, и я не хочу иметь дело с этим прямо сейчас. Я намного лучше понимаю другие языки, чем JavaScript, потому что я не могу справиться с этим страхом. У меня возникает ощущение, что когда я пишу JavaScript, я пытаюсь нарисовать портрет щенков Веймаранера.
Обычно это помогает мне помнить о наиболее важных директивах, которые я могу задавать себе для каждого шага, который я делаю. (На мой взгляд, горстка - пять или меньше.)
Можете ли вы перечислить пять (или меньше) вопросов, специфичных для JavaScript, которые я должен задавать себе для каждого шага, который я делаю, когда кодирую JavaScript? Что бы они были?
Обновление: чтобы уточнить, я не прошу пять вещей, которые следует иметь в виду при изучении JavaScript; Я прошу пять вопросов, чтобы всегда задавать себе вопрос, который должен задавать каждый. Вопросы высокого уровня, такие как: «Могу ли я повторить это где-нибудь еще?» или «является ли это имя переменной / функции достаточно специфичным (или слишком специфичным)» <== за исключением того, что эти примеры вопросов не являются специфическими для JavaScript. Я ищу директивы, которые свойственны JavaScript.
Ответы:
Я собираюсь ответить на это в двух частях. Один из них - «Пять или меньше советов по обучению написанию хорошего JavaScript». Другой - «Пять или меньше советов по написанию хорошего JavaScript».
Учусь:
Выполнение:
РЕДАКТИРОВАТЬ (добавление вопросов для соответствия ОП):
На какую область я ссылаюсь?
Это должно помочь с утечками глобальных переменных, обработчиками событий и временем использования замыканий.
Я повторяюсь?
Правильная абстракция и использование ОО методов важны. Используйте их с умом.
Мой код повторяется?
Удивительно легко обнаружить, что вы помещаете доступ DOM в цикл или создаете функции (анонимные или иные) в цикле. Обратите внимание, что это может быть верно для кода, который использует
setTimeout
илиsetInterval
также как и традиционные циклы.Значит ли это, что я думаю?
Значения правдивости и ложности в JS могут быть немного хитрыми, особенно при использовании нестрогих сравнений (
==
в отличие от===
). Динамическая типизация, приведение типов и ссылки на объекты или литералы также могут иметь значение.источник
Во-первых, узнайте, как работают технологии.
Вы должны знать это, потому что знание того, как это работает, потому что вы столкнетесь с сетевыми проблемами, или, как я видел бесчисленное количество раз, люди совершенно весело понимают, что на самом деле является серверной и клиентской сторонами. Один из самых распространенных вопросов для новичка, который я вижу: «Как я могу заставить JS изменить переменную в моем коде ASP ?!»
Поймите, ваш код больше, чем вы, или ваша конкретная ситуация
cell.innerHTML = "<script>alert("xss")</script>"
, и появляется окно с предупреждением, вы сделали это неправильно.<noscript>
теги, чтобы предупредить их об этом./[a-z ']/i
, но включают в себя хинди, арабский, акценты (это существующая проблема от недальновидных разработчиков), китайский , и другие. Понимать наборы символов, Unicode и UTF-8.Ты программист, а не макаронная фабрика. Хватит писать спагетти.
"This fizzes the bizz"
или наполовину английские наполовину французские не помогают. Опишите, что делает функция. Опишите сложные разделы кода.<a href="javascript:alert("foo")">
. FFS НЕ ДЕЛАЕТ ЭТОГО. Дождитесь полной загрузки документа, отделите ваш код JavaScript от HTML-документа. Это базовая практика ООП 101, просто никогда не вставляйте JS или CSS в ваш HTML-документ. Выясните, как это сделать правильно или найдите человека, который знает, как показать вам, как это сделать. Опять задавайте вопросы.Javascript:foo("buz")
является psudeo-протокол, он не полностью поддерживается, и если вы не в линии Javascript вы бы не использовать его в первую очередь. Я обещаю вам от всего сердца, что на этой земле или в любой точке вселенной нет причин, по которым вам НУЖНО поместить свой JavaScript внутри элемента HTML. Когда-либо. Так что не делай этого. Я даже не буду помогать людям , которые делают , что больше, это что плохо.Выясните, как написать код таким образом, чтобы он не ломался все время.
main_backup_20110911.js.bak.1
Вы теряете вещи, ваш каталог запутан, вы не можете легко «перемотать» к предыдущему моменту времени. Вы не можете видеть, что происходит, вы не можете делать исправления кода. Итак, просто начните изучать GIT, это займет у вас час, и вы никогда не вернетесь.Напишите JavaScript, который любят люди
Сосредоточьтесь на основах, всегда.
for (;;)
и почему вы используетеfor( in )
цикл. Когда использовать цикл while. Прекратите вложение IF, когда вы можете просто использовать переключатель. Объекты не сохраняют порядок, поэтому не используйте их как массив; старая Opera / FF, старая MISE, иногда Flash не учитывает порядок ваших объектов. Используйте массив, если вы хотите сохранить порядок вещей, используйте объект, если вы хотите объект (то, что не имеет порядка элементов).Сосредоточьтесь на долгой игре, а не на быстрой вспышке и умрите.
which
», бросьте кучу кода, который никто не сможет использовать, и исчезните. Вы ничего не внесли. Не используйте переменные, такие какa
иchezburger
.Для тех, кто заинтересован, я фактически взял большую часть этого из личных заметок в учебнике, который я нигде не закончил писать.
источник
TCPIP(HTTP(ClientServerRelationship(), Cookies(), HTML(JavaScript(Knowledge))))
Прочитайте Javascript Дугласа Крокфорда : хорошие части . Это довольно полезный совет, но, честно говоря, это лучший совет, который я когда-либо слышал для написания хорошего javascript.
Читайте также статьи Дугласа Крокфорда о Javascript .
источник
источник
Вот несколько вопросов, которые помогут вам перейти на JavaScript.
Как работает JSON и для чего он нужен?
Почему функции объектов в Javascript?
Почему я не должен использовать eval?
Как мне создать события в JavaScript?
Как я могу обнаружить функцию в JavaScript?
В значительной степени охватывает большинство вещей, которые вам нужно сделать в Javascript.
источник
eval()
, дважды и тройная проверка для другого способа; почти всегда есть более чистый и простой способ, если только вы на самом деле не пытаетесь выполнить весь код JavaScript.(function() {/* stuff */})()
хороший способ заключить набор кода и создать для него локальную область видимости. Использование объектов - это другой, часто лучший способ; объекты более похожи на пространства имен в других языках при использовании таким образом. Просто остерегайтесьthis
. В отличие от большинства других языков,this
не всегда ссылаются на то, что вы можете интуитивно думать, что это делает. Также помните, что если не указано иное, все переменные, функции и другие объекты JS являются глобальными, даже для нескольких.js
файлов.источник
return
, и следующую строку, содержащую ваши данные, вы на самом деле сказалиreturn ;
из-за ASI. Я бы сказал, что более важно понимать правила ASI и пробелов, чем «всегда использовать точки с запятой». Но это отличный способ спасти себя.I'd say it's more important to understand ASI and whitespace rules than it is "always use semicolons."
Я считаю, что классы являются довольно мощным инструментом для структурирования кода. Существует множество не зависящих от языка правил о том, как проектировать системы, основанные на классах, и некоторые принципы ОО на самом деле более очевидно реализуются при использовании классов.
Поэтому я предлагаю вам взглянуть на CoffeeScript .
Оттуда я предлагаю вам просто попытаться собрать информацию о том, как реализовать SOLID , DRY , GRASP , KISS и YAGNI , и, что более важно, о том, как действовать в ситуациях, когда они кажутся конфликтующими (они никогда не делают, только ваше понимание их или проблема под рукой делает). Его довольно легко найти даже на стеке.
Обратите внимание, что эти принципы в равной степени применимы и к «сырой» разработке JavaScript. Однако большое количество контента, который вы найдете на них, проиллюстрирует их с использованием языков, основанных на классах, и поэтому может быть полезно для программирования на языке, где не требуется слишком много накладных расходов для их понимания.
Лично я считаю, что JavaScript является чрезвычайно мощным языком, но на самом деле вам придется сначала глубоко понять другие языки, чтобы действительно оценить этот факт.
источник
Я предполагаю, что вы используете JavaScript для разработки клиентского интерфейса в веб-приложении.
1) Должно ли это быть на стороне клиента или на стороне сервера? Я знаю, что я пошел и написал серьезные куски кода, которые действительно заслуживают того, чтобы быть на стороне сервера, и наоборот. Много раз я собираюсь сделать AJAX-вызов, который в конечном итоге будет лучше размещен в коде Сервера, чтобы быть включенным по пути. Особенно вещи, которые статичны по своей природе, но меняются довольно регулярно (например, список категорий).
2) Есть ли плагин, который делает это уже? Я часто использую JQuery, и ответ почти всегда ДА! Я часто беру код плагина, который кто-то написал, и адаптирую его к моим потребностям (обычно добавляя дополнительные классы к вещам и т. Д.), Но редко мне когда-либо нужно начинать с нуля.
3) Является ли Javascript подходящим местом для этого? Иногда я ловлю себя на том, что добавляю целую кучу динамических стилей к чему-то через Javascript, когда разумнее использовать интеллектуальный CSS.
4) я должен использовать другой инструмент? Это то, с чем я боролся в последнее время. Есть несколько вариантов javascript, таких как кофейный скрипт , которые хорошо обрабатываются в моем стеке (Rails 3.1), и я думал, стоит ли перемещать большую часть моего кода туда.
5) Является ли этот код Javascript хорошим кодом? Javascript - это код, как и любой другой код. Этот код так же хорош, как и весь мой код? Если нет, то почему нет? Это одноразовый? Я ленивый?
источник