|
Модераторы: Sardar, Aliance |
|
Aliance |
|
||||||||||||
I ♥ <script> Профиль Группа: Модератор Сообщений: 6418 Регистрация: 2.8.2004 Где: spb Репутация: 17 Всего: 137 |
Думаю, необходимо создать такую тему, где бы описывалось, что нужно знать и помнить человеку, программирующему на JavaScript.
Итак, прежде всего это контейнер, в котором все чудо и происходит. Лучше всего писать полностью, так:
Аттрибут type указывает на то, что это сценарий JavaScript (как MIME-тип) Необязательный аттрибут language сообщает веб-браузеру, на каком языке написан сценарий. Это нужно для тех случаев, когда браузеры, не понимающие указанный язык, пропускают этот контейнер. Значения:
Далее, часто возникает ситуация, когда необходимо динамически добавить тег <script>. Обычно дилетанты делают это так:
Но это не есть корректно, т.к. интерпритатор JS, встречая закрывающий тег <script> - прекращает работу сценария, остальное выводится как код HTML. Соответственно правельно будет так:
Далее, стоит комментаровать свои сценарии и делать удобочиваемыми:
можно и нужно записать так:
Не стоит забывать о точкая с запятой в конце каждого оператора (или операции). Вообще, интерпритатор ставит их автоматом, но если вы будете их сами ставить - это облегчит вам жизнь, сделает ваш сценарий более привлекательным и поможет избежать от ошибок. Еще одна интересная история случается, когда в качестве, скажем, индефикатора функции использовать глобальный метод или в качестве имени переменно - зарезервированное слово = то возникает ошибка времени исполнения. У меня такое случалось с таким кодом:
Т.к. do - глобальный метод. Писалось о необходимости в наличии while (do/while - цикл) Итак, постим сюда свои наблюдения и находки, изощрености и прочее. |
||||||||||||
|
|||||||||||||
Opik |
|
||||
Эксперт Профиль Группа: Vingrad developer Сообщений: 1918 Регистрация: 6.10.2004 Где: Рига Репутация: нет Всего: 55 |
Не помню, когда именно возникает. Вроде при несовпадении типов, например:
решение:
|
||||
|
|||||
Aliance |
|
||||
I ♥ <script> Профиль Группа: Модератор Сообщений: 6418 Регистрация: 2.8.2004 Где: spb Репутация: 17 Всего: 137 |
может так:
Но естественно, что результат будет не таким как ожидалось. Описал тут: http://forum.vingrad.ru/index.php?showtopi...ndpost&p=432827 |
||||
|
|||||
Opik |
|
|||
Эксперт Профиль Группа: Vingrad developer Сообщений: 1918 Регистрация: 6.10.2004 Где: Рига Репутация: нет Всего: 55 |
Aliance
да, я знаю. а чем плохо, что переменные становятся глобальными? а разница toNumber или parseInt, второе как то мне больше нравится. |
|||
|
||||
Aliance |
|
||||
I ♥ <script> Профиль Группа: Модератор Сообщений: 6418 Регистрация: 2.8.2004 Где: spb Репутация: 17 Всего: 137 |
она есть, я приводил примеры. Сам с таким столкнуля =)
Это не плохо. Скорее обычные меры предосторожности. Ведь глобальную переменную создавать нужно только специально. Иначе можно забыть про это и навредить себе 8)) |
||||
|
|||||
Opik |
|
|||
Эксперт Профиль Группа: Vingrad developer Сообщений: 1918 Регистрация: 6.10.2004 Где: Рига Репутация: нет Всего: 55 |
Aliance
ок, учту. (про глобальные переменные.). Однако parseInt - аналог intval в PHP. Она поступает полностью аналогично. Я выбрал её не случайно. |
|||
|
||||
Sardar |
|
||||
Бегун Профиль Группа: Модератор Сообщений: 6986 Регистрация: 19.4.2002 Где: Нидерланды, Groni ngen Репутация: 2 Всего: 317 |
Если функция вызовет сама себя рекурсивно или где в других функцих используються те же имена(часто итератор i) то появляються трудно находимые глюки Помимо обьявления локальных переменных в функциях (var peremennaja), не стоит забывать что JS это обьектно - (*) язык (звёздочку понимайте как хотите лишь бы вам думать не мешало ). Если пишем что то, то создавайте сущности описывающие процесс или обьект. Например меню(контейнер), в меню опции и т.д. а не просто массивы. Ваш код станет более прост и читабельней, ведь:
Естественно код становиться короче и проще, ведь код в каждом обьекте будет описывать всё необходимое для работы только с этим "типом" обьекта. Полезно не пользоваться старыми способами адресаций типа: document.all или просто document.что_либо. Во первых это ведёт к не переносимому на новые платформы коду. Во вторых коллекции содержат элементы не только по идентификатору, но и по имени, в результате получаем коллизии имён/ИД. Нет стандартного действия в такой ситуации, браузер может выдать список всех элементов с таким именем/ИД или просто первый встречный элемент. Вывод: задаём уникальные идентификаторы(а это не всегда нужно ) необходимым элементам, выбираем сие по document.getElementById На счёт идентификаторов третий совет: елси вы генерите скриптом кучу кода(допустим меню), то не задавайте вашим субэлементам идентификаторы типа ("префикс_"+счёчик). Гораздо проще положить все элементы в дополнительный контейнер(например div) и работать с элементами через W3C DOM. Другими словами задайте правильную логичную структуру тому что вы генерите и это сыграет вам на руку. -------------------- Опыт - сын ошибок трудных © А. С. Пушкин Процесс написания своего велосипеда повышает профессиональный уровень программиста. © Opik Оценить мои качества можно тут. |
||||
|
|||||
Dave |
|
||||||
Бывалый Профиль Группа: Участник Сообщений: 190 Регистрация: 17.6.2004 Репутация: нет Всего: 1 |
то есть в ф-ии когда пишем var variable_name то переменная локальная а если без var то глобальная, я правильно понял ? а как поступить с итератором i в ф-ии чтобы он был локальным? написать предварительно var i =0; ? ...кажется нашел, в ф-ии в цикле можно так написать
Это сообщение отредактировал(а) Dave - 28.7.2005, 12:33 |
||||||
|
|||||||
Гость_12345 |
|
|||
Unregistered |
Приёмы в написании кодов JS.
Для сокращения длинных записей и улучшения читаемости:
|
|||
|
||||
Гость_12345 |
|
|||
Unregistered |
|
|||
|
||||
Sardar |
|
|||
Бегун Профиль Группа: Модератор Сообщений: 6986 Регистрация: 19.4.2002 Где: Нидерланды, Groni ngen Репутация: 2 Всего: 317 |
Не согласен, d менее читаемо чем document, наработано опытом 2) а зачем eval то? 4) одна из самых плохих привычек - опускание кавычек. Такой код не читаем стандартными парсерами, это кстати одна из причин создания XHTML. Совет вем: не опускайте кавычки и не сокращайте логичное и ясное false до !1 5) DOM придумывался как стандартный интерфейс к деревьям документов. Имена методов долзны запоминаться как они есть, т.к. помимо JS есть и другие языки, где W3C DOM актино используеться и имена те же самые. document.getElementById сразу ставит все точки над i, d.ID вводи в заблуждение выигрывая несколько символов в коде... не на том экономишь 7) люблю так писать, но большинство народу не любят такую запись, т.к. менее читаема. Согласен с ними, но по прежнему пишу кратко 9) можно и так alert([12,23,aaa,xxx].join(' ')); с пробелом, кстати технически этот код не обязательно тeрбует больше ресурсов чем просто со строками, в своём Trilobite Scripting Language (скриптовое окружение для eZ80) выбрал стратегию экономить на памяти, с массивом код по идее должен отрабатывать быстрей. Не знаю как реализованно в JS браузера. 10) и зачем эти пару символов экономить, нужно думать над алгоритмом, писать эффективно. Сэкономленные пара байт не заметны для пользователя, даже если он на самом убогом модеме, за то ты сам будешь долго материться если придёться переделывать такой код года через полтора -------------------- Опыт - сын ошибок трудных © А. С. Пушкин Процесс написания своего велосипеда повышает профессиональный уровень программиста. © Opik Оценить мои качества можно тут. |
|||
|
||||
Ciber SLasH |
|
|||
Эксперт Профиль Группа: Участник Клуба Сообщений: 1813 Регистрация: 9.11.2004 Где: С.-Петербург Репутация: нет Всего: 67 |
Полностью согласен с Sardar.
2Гость_12345: Твой код иногда сложновато разобрать, приходится повторно смотреть, что же это за d.<что-то>. Конечно я согласен с: "Если писать только для себя скрипты и разработать определённые правила (типа: d - это document; d.ID - это document.getElementById), то конечно можно писать как можно меньший код, опуская точки с запятой, придумывать ещё какие-то сокращения, бороться за байты в документе... Но если твой код прийдётся смотреть другим людям, то у них явно возникнут проблемы с пониманием твоего кода." |
|||
|
||||
Гость_12345 |
|
|||
Unregistered |
Sardar: я перечислил выработанные для себя правила, например, знаю, что в своём коде не буду занимать имена d, v, hid, d.ID и некоторые другие под другие переменные. Некоторая надстройка над языком, принятая 1 раз и помогающая не отвлекаться на длинные имена и длинные выражения с длинными именами. У других - другие условности. Когда читаешь чужой код и есть желание разобраться, приходится учитывать.
2) а зачем eval то? Чтобы 1 раз написать вверху кодов, а потом знать, что в каждом обработчике приводится объект event к имени "е". Обработчиков много, и тогда несущественные формальности мешают читать суть. alert([12,23,aaa,xxx].join(' ')); не хочу ради краткости, при отладке. 5) DOM придумывался... document.getElementById), ... Другие языки будут с этими проблемами разбираться сами, а здесь она решается так. > нужно думать над алгоритмом, писать эффективно согласен, а эти приёмы мне помогают читать алгоритм в коде. 4) одна из самых плохих привычек - опускание кавычек. Такой код не читаем стандартными парсерами... пока не использую парсеры и не планирую использовать их, не собираюсь утруждать себя следованию стандартам, написанным не для живого HTML. Так же, как var имя_переменной=...; в функциях. Когда задача перерастёт установленные рамки, это будет заметно по задаче, тогда и переучимся. Пока этого нет, не надо засотрять текст несущественным. Сравните: мы произносим слова так, чтобы это было понятно собеседнику, а не так, как написали бы то же самое в книге, чтобы удовлетворить всем. На этом пути начал Перл, но он же и рухнул под массой условностей - $i="$j$k";print$i; Ничего - взяли лучшее и пошли дальше. Ciber SLasH У меня тоже возникают проблемы, когда экран засорён длинными выражениями с малым содержанием, какого размера экран бы ни был. |
|||
|
||||
Sardar |
|
|||
Бегун Профиль Группа: Модератор Сообщений: 6986 Регистрация: 19.4.2002 Где: Нидерланды, Groni ngen Репутация: 2 Всего: 317 |
Гость_12345 - явно минималист
Интересно что сам таким был, пока не столкнулся с коллективной разработкой. Не под каким либо давлением, а "по собственному разумению" врдруг приходишь к тому что писать нужно ясно и не забывать о коментариях, которые порой больше чем сам код В любом случае я не советую другим пользоваться твоми приёмами, больше проблем.
Код что в eval можно сразу вписать в функцию, всё равно меняться не будет, лишняя потеря в производительности. -------------------- Опыт - сын ошибок трудных © А. С. Пушкин Процесс написания своего велосипеда повышает профессиональный уровень программиста. © Opik Оценить мои качества можно тут. |
|||
|
||||
Гость_12345 |
|
|||
Unregistered |
> Код что в eval можно сразу вписать в функцию
Когда речь о производительности, а не о наглядности, то другое дело. И d.ID придётся развернуть. О комментариях не забываю, до коллективной работы не доходил. : ) |
|||
|
||||
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | JavaScript: для новичков | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |