Персональные инструменты
Счётчики

JavaScript

Материал из Lurkmore
Перейти к: навигация, поиск
Facepalm kyon sq.jpgЭта статья состоит из уныния и отчаяния.
Сделайте с ней что-нибудь.
Пожалуйста.

Содержание

Javascript

Javascript — скриптовый язык, чаще всего использующийся при создании сценариев поведения браузера, встраиваемых в веб-страницы. Является одной из реализаций языка ECMAScript. Изначально он весьма напоминал Scheme, но слово Java тогда было популярно, поэтому заказчик разработки (Нетскейп) потребовал от разработчиков сменить грамматику, чтобы стало похоже на жабу.

Благодаря Javascript появилась возможность проведения XSS-атак создавать интерактивные веб-страницы.

Javascript не имеет никакого отношения к языку Java. (K.O. напоминает - учить надо не только матчасть, но и историю. В годы создания JS Нетскейп и SUN (созидатель Java) вроде как дружили и JavaScript был так назван, чтобы вроде как подчеркнуть эту самую дружбу. А технически они и вправду никак не связаны)

Особенности языка

Является языком с непривычной прототипной объектной моделью.[1] В Javascript используется делегирование, что дает возможность в ходе выполнения программы поменять поведение клонированных от прототипа объектов, например, добавив новые методы для клонированных объектов.

Javascript — язык, где функции являются объектами.

В общем, JavaScript — это такой дзенский язык программирования, в котором всё — объекты[2], и нет никакой разницы между хэшем и объектом, между объектом и классом, между свойством и методом, между методом и обычной функцией...

Дмитрий Котеров

Javascript поддерживает замыкания, что дает утечку памяти[2][3] возможность плодить функции, которые будут работать с разными переменными, которые эти функции будут видеть как глобальные (пример ниже).

Недостатки

Самый главный недостаток — доступность быдлокодерам и прочим отбросам от программирования, в результате чего каждый третий напичканный сабжем сайт перманентно жрет 100% процессора. Хочется взять и уебать всех этих мудаков с падающими снежинками и прочим говном, тормозящим не только браузер, но и всю систему.

Примеры кода

<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
obj2.id = 5
obj1.id_pr = 4
obj2.id_pr = 4

»
Косая Горящая Лиса

Через прототипы можно добавить новую функцию или метод к уже существующим классам[3]

Array.prototype.newFunc = function () { 
   return this.join(':');
}

Тем самым мы добавили к каждому массиву функцию 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;
}

На что браузер скажет:

«

a() = 4
b() = 9

»
Лучший в мире отображатель страниц

Разное

Таблица сравнений Javascript

В Javascript есть значения true, false, null, undefined, Nan, Infinity, что очень удобно — см. рис.

Сценарии на javascript можно запускать, набрав в адресной строке браузера javascript:<некий код> (наверное поэтому, некоторые считают javascript протоколом :-)[4], это даёт возможность украсть куки, проверить значения некоторых глобальных переменных и вызвать определенные функции (хотя для этих целей удобно использовать плагин Firebug для Firefox`а), а также использовать в коде web-страницы ссылки типа

<a href="javascript: alert( 'НЕ ДОВИ НА МЕНЯ!' );">ссылка</a>

вместо ущербных

<a href="#" onclick="alert( 'НЕ ДОВИ НА МЕНЯ!' );">ссылка</a>

Алсо

JScript — Ещё одна микрософтовская, и потому непортируемая и нестандартная, вариация. JScript и JavaScript — это нифига не одно и то же, хотя выглядят похоже.

См. также

Примечания

  1. Однако в 2.0 версии обещают нам, что будет всё в ажуре[1] — однако, этот ажур наступит тогда, когда вымрут все пользователи IE6/IE7/IE8
  2. На самом деле это распространённое заблуждение среди новичков - например, переменные типа boolean объектами не являются. К примеру, undefined является глобальной переменной.
  3. Вообще-то в javascript классов нет, есть только объекты, например глобальный объект Array, но для простоты я буду называть эти глобальные объекты классами
  4. Хуй с каким-то прыщавым школьников. Сама студия имени Его Самого считает Жабу протоколом