Javascript
Материал из Lurkmore.
Содержание |
[править] Javascript
Javascript — жопный скриптовый язык, чаще всего использующийся при создании сценариев поведения браузера, встраиваемых в веб-страницы. Является одной из реализаций языка ECMAScript.
Благодаря Javascript появилась возможность проведения XSS-атак создавать интерактивные веб-страницы.
Javascript не имеет никакого отношения к языку Java.
[править] Особенности языка
Является языком с мерзкой прототипной объектной моделью. В Javascript используется делегирование, что дает возможность в ходе выполнения программы полностью поменять поведение клонированных от прототипа объектов добавить, например, новые методы для клонированных объектов.
Javascript — язык, где даже функции являются объектами пруф
В общем, JavaScript — это такой дзенский язык программирования, в котором все — объекты, и нет никакой разницы между хэшем и объектом, между объектом и классом, между свойством и методом, между методом и обычной функцией... |
— Дмитрий Котеров |
Javascript поддерживает замыкания, что дает утечку памяти[1][2] возможность плодить функции, которые будут работать с разными переменами, которые эти функции будут видеть как глобальные (пример ниже).
[править] Примеры кода
<script>
//создаём класс, который является функцией
function Obj () {
this.id = 5;
return this;
}
Obj.prototype.id_pr = 3;
var obj = new Obj();
var obj2 = new Obj();
obj.id = 3;
Obj.prototype.id_pr = 4;
alert('obj.id = ' + obj.id + '\nobj2.id = ' + obj2.id + '\nobj.id_pr = ' + obj.id_pr + '\nobj2.id_pr = ' + obj2.id_pr);
</script>
На что браузер скажет:
Через прототипы можно добавить новую функцию или метод к уже существующим классам[1]
Array.prototype.newFunc = function () {
return this.join(':');
}
Тем самым мы убили возможность использовать цикл for in, добавили к каждому массиву функцию newFunc, возвращающую строчку, состоящую из списка элементов, разделённых двоеточиями.
//Замыкания
function test(i) {
var 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;
}
На что браузер скажет:
b() = 9“
[править] Разное
В Javascript есть значения true, false, null, undefined, Nan, Infinity, что очень удобно ведь приходится смотреть в таблицу сравнений (рисунок справа).
Сценарии на javascript можно запускать, набрав в адресной строке браузера javascript:<некий код> (наверное поэтому, некоторые считают javascript протоколом :-)[2]), это даёт возможность украсть куки, проверить значения некоторых глобальных переменных и вызвать определенные функции (хотя для этих целей удобно использовать плагин "Execute JS" для Firefox`а)
[править] Примечания
- ↑ Вообще-то в javascript классов нет, есть только объекты, например глобальный объект Array, но для простоты я буду называть эти глобальные объекты классами
- ↑ http://forum.antichat.ru/thread13949.html
[▲]
Любой программист без словаря поймёт, что такое Javascript | |
---|---|
Быдлоязыки | 1С • PHP • Pascal • Васик • Жаба • Си-решётка • JavaScript • Python • C++ |
Небыдлоязыки | BrainFuck • Erlang • Forth • Haskell • LISP • Perl • Tcl |
Ассемблеры | Ассемблер • Няшная Сишка |
Профессии | Программист • Быдлокодер • Индус • Хеллоуворлдщик |
Прочее | Regexp • Рекурсия • ++i + ++i • Выстрелить себе в ногу |