JavaScript

индекс
246,46

Равенство typeof undefined == 'undefined' не верно, если переменная «undefined» задана! И как быть?

37.3%
(235)
Я всё равно пишу «undefined», надеясь на то, что никто и нигде не совершит такой глупости, как переопределение этой переменной.
1.43%
(9)
Я пишу «void 0» вместо «undefined», или пишу «void нечто_другое».
1.75%
(11)
Я пишу «{}[0]» вместо «undefined», или пишу «{}['']», или «{}['нечто_другое']».
3.81%
(24)
Я использую другой способ записи неопределённого значения. (Подробнее можно рассказать в комментарии к опросу.)
4.6%
(29)
Вместо «x = undefined» я пишу «delete x», а передавать неопределённое значение в функцию (или в метод объекта) мне не приходилось.
51.11%
(322)
А я вообще не пишу на языке JavaScript.

Проголосовало 630 человек. Воздержалось 278 человек.

–5
17 октября 2011, 11:44

Автоматизация через Userscript из песочницы

Привет, Хабр!

Вступление

Хочу поделиться с личным открытием использования связки Userscript и jQuery для автоматизации действий на любимом или не очень любимом сайте. Участвую тут на одном портале в конкурсе, одно из предложений быть среди победителей быть самым активно голосующим пользователем.

Решение

Можно было бы написать небольшое десктопное приложение (благо опыт в C# есть), но это трудоемко, а задачу решить надо в кратчайшие сроки. На помощь мне пришел Userscript, позволяющий внедрить свою функцию в страничку и запустить её.
Для избежания проблем с регулярными выражениями (стандартная функция RegEx) воспользовался библиотекой jQuery и базовыми функциями Javascript внедрил её в страничку:
   var head = document.getElementsByTagName('head')[0];
   var script= document.createElement('script');
   script.type= 'text/javascript';
   script.src= 'http://code.jquery.com/jquery-latest.js';
   head.appendChild(script);
–6
20 сентября 2011, 18:12
1

Javascript: «классы» и наследование из песочницы

Меня всегда немного бесило отсутствие в Javascript понятия класса как такового, а с наследованием вообще довольно туговато. Почитав на эту тему довольно много материалов и попробовав несколько «обходных» путей отсюда, в том числе и приведенную в комментариях немного урезанную версию библиотеки ajaxoop.js, не нашел ничего подходящего и привычного.

Однако была задача, потребовавшая реализации «привычного» наследования, дополнительным приятным побочным эффектом которой стало наличие возможности множественного наследования.
–3
8 сентября 2011, 12:27
18

Как отобразить страницу в UTF-8, несмотря на windows-1251 в HTTP-заголовке

Есть у меня старый сайт на Народ.Ру, и недавно я закинул туда несколько статей — как это я теперь делаю в UTF-8. Кодировка была указана в теге meta, но, взглянув на страницы, я увидел крякозябры: «Р§С‚Рѕ-то случилось.» Оказывается, Народ.Ру шлёт HTTP-заголовок Content-Type: text/html; charset=windows-1251 и это на нём никак не отключается. Пользователь может получить читабельный текст — только если догадается вручную переключить кодировку в браузере.

Что делать? Переходить на другой хостинг? Само собой, но пока руки не дошли, хотелось добиться результата тут. Перекодировать тексты? Более достойным и интересным показалось поставить Javascript-«заплатку».

Способа переключить кодировку из Javascript я не нашёл. Остался вариант перекодировать текст скриптом, запускаемым по событию onready документа.

Итак, браузер получает текст в UTF-8, разбивает UTF-последовательности на группы по 8 бит и трактует их как коды символов в кодировке Windows-1251. Чтобы восстановить читаемость текста, нужно получить эти коды, объединить их в UTF-последовательности, а из них — восстановить Unicode-коды символов и вернуть последние посредством числовых ссылок HTML на символы. В этом деле обнаружились несколько закавык.

–2
10 мая 2011, 11:06
9

Brainfucker-ы замечены среди разработчиков JavaScript

JavaScript PHP
// if ( 0 ) не выполнится 
// if ( 0 ) не выполнится 
if ( 2 ) выполнится 
if ( 2 ) выполнится 
if ( -1 ) выполнится 
if ( -1 ) выполнится 
if ( false == 0 ) выполнится 
if ( false == 0 ) выполнится 
if ( false == '0' ) выполнится 
if ( false == '0' ) выполнится 
if ( false == '00' ) выполнится 
// if ( false == '00' ) не выполнится 
if ( false == '0x0' ) выполнится 
// if ( false == '0x0' ) не выполнится 
— мы видим, что JavaScript парсит строку с числом более тщательно. Едем дальше
if ( 'bla bla bla' ) выполнится 
if ( 'bla bla bla' ) выполнится 
// if ( false == null ) не выполнится 
if ( false == null ) выполнится 
— поразительно, но в JavaScript false не равен null

–10
4 февраля 2011, 13:55
22

Можно ли в названии переменной использовать $ (знак доллара)?

42.77%
(201)
Можно
29.57%
(139)
Можно, но нежелательно
27.66%
(130)
Нельзя

Проголосовало 470 человек. Воздержалось 142 человека.

–9
21 января 2011, 13:52

Node.JS — Основы асинхронного программирования, часть 1

Сейчас, после выхода стабильной версии Node.JS 0.2.0, я решил начать цикл статей по программированию с его использованием.

Основная концепция Node.JS — любые операции ввода-вывода по умолчанию реализованы как асинхронные, после выполнения операции будет вызвана функция обратного вызова, первым параметром которой будет являться ошибка или null.

Скрываем асинхронную вложенность


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

Для того, чтобы скрыть сложность работы с асинхронными операциями, вынесем работу по созданию каталога в отдельный асинхронный метод:
–2
26 августа 2010, 16:37
38

Простой способ немного разгрузить инициализацию javascript на странице

Возможно, кому-то будет полезной такая мысль.


У вас есть большой многостраничный сайт. На разных страницах у вас разные сложные яваскриптовые штуки: красивые галереи, аяксовые листалки, где-то вообще чуть ли не приложение сделано. Все это крутится на каком-нибудь jQuery/Prototype/Mootools/etc., на каждую такую штуку вызывается кипа функций, сложные селекторы айди и классов и т.д. и т.п.
И все эти скрипты вы, как заботящийся о производительности девелопер, аккуратно засунули в один JS-файл и упаковали.

Но есть неприятность: при открытии каждой страницы ваш скрипт будет шерстить DOM, в попытках найти и выбрать все узлы, которые задействованы во всех вышеописанных «штуках». Т.е. сколько у вас в скрипте селекторов вроде $('.myclass'), getElementById и т.п., столько раз после загрузки DOM он будет сканироваться в поисках этих элементов.

А если у вас скрипт на 1.5 тысячи строк и таких селекторов у вас «over 9000»? Это будет тормозить загрузку страницы. Конечно, потери не столь большие, чтоб как-то сильно заморачиваться, но можно очень просто и легко от этого избавиться: заворачивать наборы функций, описывающие работу JS-приложений в проверку наличия этих самых приложений.
–2
10 августа 2010, 22:41
24

Vertical scroll при помощи Javascript

Часто попадаются блоки рекламы, где текст, прокручивается вертикально. Для того чтобы сделать такой блок можно использовать несколько технологий: Flash, Silverlight, Javascript. Для решения своей задачи я использовал Javascript. Из плюсов можно выделить то, что нет необходимости ставить дополнительные плагины.
–7
9 августа 2010, 16:03
12

Притча об автоматическом менеджменте виджетов

— Здравствуй…
— А-а-а! Памагите! Убивают! \(0_0)/
— Дружок, спокойно, я свой :-\
— Свои незаметно сзади не подкрадываются! \(@_@)/
— А я динамически добавился В-]
— Э-э-э \(~_~)/
— Ясно, не знаешь, как реагировать на такие ситуации? XD
— Ну… как бы… есть мысли… \(=_=)/
— Покажи-ка свой исходник %-)
— Я… эта… стесняюсь… \(._.)/
— Давай, не боись, я же свой ;-)
— Лаааадно \(-_-)/
<body>
    <script>
        $(function(){
            $('.c-example').wrapInner( '<span class="wrapper" />' )
        })
    </script>
    <div class="c-example">epic</div>
</body>
–10
15 апреля 2010, 01:15
14