Javascript
Материал из Lurkmore
Эта статья сделана из уныния и отчаяния. Сделайте с ней что-нибудь. Пожалуйста. |
Содержание |
[править] Javascript
Javascript — скриптовый язык, чаще всего использующийся при создании сценариев поведения браузера, встраиваемых в веб-страницы. Если где-либо на веб-страничке что-либо прыгает, скачет, как-то иначе двигается, скукоживается, моргает, перекрашивается и все это при отсутствии адового тормозного Flash'a — значит это проделки JavaScript. В его же трудовые обязанности входит изменение содержимого странички без ее перезагрузки (всякая хренотень типа «Читать далее…», «Скрыть/показать/Свернуть/развернуть», вставить ник/wiki-тег в поле ввода по клику и т. д.) .
Сабж является одной из реализаций языка ECMAScript. Изначально он весьма напоминал Scheme, но слово Java тогда было популярно, поэтому заказчик разработки (Нетскейп) потребовал от разработчиков сменить грамматику, чтобы стало похоже на жабу.
Благодаря Javascript появилась возможность проведения XSS-атак создавать интерактивные веб-страницы.
Javascript не имеет никакого отношения к языку Java. (К.О. напоминает — учить надо не только матчасть, но и историю. В годы создания JS Нетскейп и SUN (созидатель Java) вроде как дружили, и JavaScript был так назван, чтобы как бы говорить нам об этой самой дружбе. А технически они и вправду никак не связаны.) Алсо, орловские вместе с приобретением солнцевских получили в качестве одного из бонусов права на торговый знак JavaScript. Так-то.
В эпоху Web 2.0 сабж получил второе рождение, ибо вдруг оказалось, что помимо всяких там двигающихся текстов, и прочей второстепенной хуиты, можно юзать JavaScript для взаимодействия сервера и компа клиента не только во время обновления странички, но и между тыканьем по ссылкам или кнопке f5. Одним из первыех эту фишку просек Google и понаделал всякие интерактивные GMail и Google Maps[1]. С тех пор порождение JavaScript'a — Ajax юзают все кому не лень везде, где только можно и нельзя.
[править] JavaScript-библиотеки
В целях упрощения процесса генерирования очень нужных и важных графических хреновин и прочего, для простыx смертных были написаны туевы хучи библиотек типа jQuery, Mootools и т. д. Позволяют в три строчки понаписать всякие там исчезалки/растворялки/скрывалки/раскрывали части страничек. В тех же трех строчках можно уместить и какие-нибудь мудреные Ajax-запросы с обработкой полученного ответа.
В целом использование этих библиотек вполне позволяет web-программеру не знать большей части JavaScript'a ибо нахуя, если все написано до нас?
[править] Особенности языка
Является языком с непривычной прототипной объектной моделью. В Javascript используется делегирование, что дает возможность в ходе выполнения программы поменять поведение клонированных от прототипа объектов, например, добавив новые методы для клонированных объектов.
Javascript — язык, где функции являются объектами.
В то же время, JavaScript не является полностью ООП языком, в нем есть простые типы. Так как обьекты в логическом контексте возвращают всегда true, и у каждого примитивного типа есть его обьектный тип собрат, это может привести к такому коду, заставляющему новичков срать кирпичами.
var simpletype = false;
var objecttype = new Boolean(false);
if(simpletype) {
alert("Этот код никогда не выполнится")
} else {
alert("Да, false. А вы ожидали чего-то другого?")
}
if(objecttype) {
alert("O_o wtf? Быдлокодер-кун негодует")
} else {
alert("Этот код никогда не выполнится")
}
Тоже относится и к остальным простым типам.
Javascript поддерживает замыкания, что дает утечку памяти[1][2] возможность плодить функции, которые будут работать с разными переменными, которые эти функции будут видеть как глобальные (пример ниже).
[править] Недостатки
Самый главный недостаток — доступность быдлокодерам и прочим отбросам от программирования, в результате чего каждый третий напичканный сабжем сайт перманентно жрёт 100% процессора. Хочется взять и уебать всем этим мудакам с падающими снежинками и прочим говном, тормозящим не только браузер, но и всю систему. Да спасет нас NoScript!
[править] Примеры кода
<script>
//создаём класс, который является функцией
function Obj () {
this.id = 5;
}
Obj.prototype.id_pr = 3;
var obj1 = new Obj();
var obj2 = new Obj();
obj1.id = 3;
Obj.prototype.id_pr = 4;
alert( ['obj1.id=', obj1.id,
'\nobj2.id=', obj2.id,
'\nobj1.id_pr=', obj1.id_pr,
'\nobj2.id_pr=', obj2.id_pr].join('') );
</script>
На что браузер скажет:
« |
obj1.id = 3 | » |
— Косая Горящая Лиса |
Через прототипы можно добавить новую функцию или метод к уже существующим классам[2]
Array.prototype.newFunc = function () {
return this.join(':');
}
Тем самым мы добавили к каждому массиву функцию newFunc, возвращающую строчку, состоящую из списка элементов, разделённых двоеточиями.
//Замыкания
function test(i) {
var i = i; //Какой долбоёб написал эту строчку? Переменная i и так существует в объекте активации данной функции.
return function () {
return i * i;
}
}
var a = test(2);
var b = test(3);
alert('a() = ' + a() + '\nb() = ' + b());
//Спасаемся от утечек памяти, смотри [1] и [2]
onunload = function () {
a = null;
b = null;
// гении блеадь, оператор delete для кого был создан? // Сам, блядь, гений - оператор delete не удаляет сущности, инициализированные через var
}
На что браузер скажет:
« |
a() = 4 | » |
— Лучший в мире отображатель страниц |
[править] Разное
В Javascript есть значения true, false, null, undefined, NaN, Infinity, что очень удобно — см. рис.
Сценарии на javascript можно запускать, набрав в адресной строке браузера javascript:<некий код>, это даёт возможность красть печенюшки, проверять значения некоторых глобальных переменных и вызвать определенные функции (хотя для этих целей удобно использовать плагин Firebug для Firefox`а), а также использовать в коде web-страницы ущербные ссылки типа
<a href="javascript: alert( 'НЕ ДОВИ НА МЕНЯ!' );">ссылка</a>
вместо кошерных тоже ущербных
<a href="#" onclick="alert( 'НЕ ДОВИ НА МЕНЯ!' );">ссылка</a>
Объяснение: вариант "a href="javascript:…"« для типовых применений ущербен по определению, ибо при открытии "средней кнопкой" (или через меню: в новом окне) получаем фэйл. и неважно, включена/имеется ли поддержка скриптов — откроется пустое окно с недействительным адресом.
вариант с "a href="#» onclick="…"" тоже сливает, ибо а) При отключеных скриптах ничего не произойдёт б) нажатие на ссылку средней кнопкой вызовет открытие бесполезного дубликата страницы в) При отключенных скриптах возможности выполнить действие нет. Совсем нет.
Правильный вариант: ссылка должна иметь реальный хреф на реальную страницу, либо onclick нужно прописАть не ссылке, а другому эл-ту, например, картинке. Подробнее читаем у Тёмы на сайте.
[править] Алсо
- JScript — То же самое что и JavaScript, тоже реализация языка ECMAScript, но микрософтом. Назван так чтобы Sun (владелец трейдмарка на Java) не доебывался насчет названия. Разница в реализациях стремительно сокращается с каждым новым браузером.
- CSS — да-да-да, кроме спорного удобства смены-оформления-элемента-под-курсором, содержит в себе расширения, позволяющие включать javascript-код в стили (css-файлы), работает в самом лучшем в мире браузере.
В некоторых браузерах при отключении сценариев этот код РАБОТАЕТ.
- Ajax — «технология» пере-запросов js-скриптом произвольного элемента страницы или данных, обычно улучшает веб-приложения и портит обычные сайты.
- Флэш, Java- («обычная») и прочие ActiveX-апплеты — бинарные куски говна для браузера. Впрочем, работают сами по себе, и к окружающей странице не лезут.
- Node.js — теперь можно писать на JavaScript и на стороне сервера.
[править] См. также
- Ajax
- Стандарт, например
- Небольшой туториал
- Писькомер скорости жабаскрипта для браузеров, версия Гугла
- Писькомер скорости жабаскрипта для браузеров, яблочная версия
[править] Примечания
- ↑ Вы только представьте адские мучения, которые настигли бы вас если бы нужно было обновлять страничку для просмотра каждого нового участка карты или смены её масштаба. При этом никакой плавности перемещений не было бы и в помине.
- ↑ Вообще-то в javascript классов нет, есть только объекты, например глобальный объект Array, но для простоты я буду называть эти глобальные объекты классами
[ + ] Любой программист без словаря поймёт, что такое Javascript
|
|||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
|