JavaScript

Материал из Неолурк, народный Lurkmore
Перейти к навигации Перейти к поиску
ЛуркоморьеСтарое обсуждение
Использование функций отладчика
Типичный сложный JS-код

JavaScript (aka JS, Жиес, Яваскрипт, Жабаскрипт) — скриптовый язык программирования, один из трех китов современного Интернета. Именно создание JavaScript наибольшим образом повлияло на развитие нового поколения Интернета, позволив динамическое обновление страницы (в то время как CSS и HTML4 позволяли только красиво страницы оформить).

Технически это объектно-ориентированный, процедурный язык программирования. Был впервые анонсирован компанией Netspace в 1995 году. Язык был разработан для «оживления» статичных веб-страниц. С появлением этого языка сайты стали более интерактивными и дружелюбными. Не нужно путать с Java. Java и JavaScript это совершенно разные языки программирования.

Основная задача JS — жонглирование стилями элементов страницы, задание анимаций, всплывающих окон. Кроме того, JS может выполнять математические вычисления, устанавливать таймеры, работать с датой и временем, производить манипуляции с файлами куки. JS позволяет отправлять данные на сервер без перезагрузки страницы (технология AJAX). Таким образом экономится трафик и уменьшается нагрузка на сервер, а интерактивность веб-сайта не уступает обычным приложениям.

Язык поддерживается всеми браузерами (кроме осла, но для этого есть babel и полифилы), способен выполняться на серверах (благодаря такой поделке, как Node.JS), да на нем даже пишут десктопные программы на такой Б-гомерзкой вещи, как Electron.

Описание[править]

JavaScript был разработан в 1995 году и получил в названии префикс «Java» за счет сотрудничества в разработке с Oracle по причине желания Netscape распространить свою поделку на большее число программистов, которые увидев название языка подумали бы: «Да это же прям как Java!». Собственно, из-за чего некоторые периодически путают Java и JavaScript, которые являются совершенно разными языками, используемыми для разных задач. Сам язык де-факто разработан в Netscape дней за 15, поэтому никто особо не переживал из-за таких потрясающих архитектурных решений, вроде глобальных переменных или тем более, что данные в скриптах представлены как строки. Достаточно было и того, что на страницах выполнялись какие-то действия при нажатии мышкой на какие-нибудь кнопки.

Настоящую популярность язык получил уже спустя 10 лет, когда началось внедрение технологии AJAX (обмена данными с сервером при помощи запросов скриптов, без обновления страницы), что предоставило совершенно новые возможности создания интерактивного контента — стало возможно подгружать новый контент без перезагрузки страницы, что очень сильно повысило удобство и понятность работы (в старых сайтах типа LiveJournal надо было руками пролистывать старые страницы).

Ныне JavaScript имеется практически везде, на каждом сайте. Интересно, что в MediaWiki развитие джаваскрипта происходит очень медленно, все служебные действия производится на отдельных страница (типа удаления или отката) вместо того, чтобы делать их прямо на странице через JS. Большинство JS-инструментов написаны самими пользователями, а не разработчиками.

Есть также и возможность написания собственных JS-скриптов для автоматического применения их к страницам определенного сайта; в частности, имеются подобные расширения для Firefox (Greasemonkey), которые позволяют запускать скрипты любой сложности, например для автоподстановки каких-либо данных в формы.

Файлы JavaScript традиционно обладают расширением .js. В принципе JS-код можно встраивать непосредственно в текст страницы с использованием тега <script>, но это считается не особенно правильным и в основном практикуется разделение на файлы.

Безопасность[править]

Долгое время существовали сомнения насчет безопасности JavaScript, так как он позволяет определить различные параметры системы (вроде разрешения экрана), которые невозможно получить нормальным методом. В связи с этим становится возможна массовая слежка за пользователями посредством анализа их оборудования. Некоторые беспокоятся еще и насчет IP-адреса, однако в большинстве случаев получить реальный IP с использованием скриптов как раз невозможно (впрочем, это возможно сделать на стороне приложения, к которому обращается JS-вебморда, так как все хранится в заголовках запроса). Различным криптошизам, беспокоящимся насчёт того, что через активные скрипты могут собирать метрики технологические гиганты, вроде Google или Microsoft, можно попробовать расширение NoScript, доступное как под Chrome-, так и Firefox- подобные браузеры. Разумеется, настраивать каждый сайт придётся ручками и не факт, что через скрипты самого сайта не ведется мониторинг, но скрипты вроде Google-аналитики и прочие можно безболезненно отсечь.

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

Встречаются до сих пор старомодные юзеры, которые пользуются очень старыми ОС и не менее старыми браузерами. В таких браузерах многие сайты открываются некорректно, также из-за тупизма самой системы может повисать комп и всё отключаться.

Для простого пользователя в принципе JavaScript безопасен. JS-скрипты выполняются в пределах окна браузера и не могут получить прямой доступ к системе. JS не может напрямую записывать и модифицировать файлы на ПК пользователя. Единственная угроза: JS может задолбать пользователя рекламными вплывающими баннерами и зависнуть страницу. Но есть один нюанс: если будут установлены левые вредоносные плагины для браузера, то хакер может получить доступ к такому плагину через JS, а уже этот плагин может натворить на ПК что угодно.

А вот в устаревшем IE JavaScript позволял получить доступ к ПК непосредственно без всяких плагинов и примочек. Непонятно зачем для IE придумали метод ActiveXObject (). Через этот метод JS может запустить на ПК объект ActiveX и сделать что угодно. Например, вот так можно запустить блокнот прямо из окна браузера:

	
var x=new ActiveXObject("WScript.Shell");
	
x.run("notepad.exe");
	

таким макаром можно запускать не только безобидный блокнот, но и редактировать реестр, модифицировать документы MS Word и многое другое. В последних версиях догадались сделать запуск ActiveX только с подтверждением юзера.

TypeScript[править]

Несмотря на существование языка с 1995 года, многие программисты, изначально знакомые с строго типизированными языками, такими как Java, C#, C++, люто, бешенно фрустрировали с того, что мало того, что в JS совершенно нет типов, так и еще приходится отлаживать любую функцию либо через console.log(), либо прописывая в нужных местах debugger и пытаться пердолить встроенный в браузер отладчик. А, поскольку язык интерпретируемый, а не компилируемый, то ошибки с разницей типов, неправильным вызовом функции и прочие возникали ВО ВРЕМЯ ЗАПУСКА СКРИПТА, что превращало написание более-менее сложных скриптов в определенного рода пытку.

Более того, JS сам-по-себе был до определенного довольно ограниченным, вынуждая либо писать самому нужные программисту функции, раздувая и без того довольно запутанный код, либо применять, если можно так выразиться, диалекты JS, вроде CoffeeScript ради большей компактности и синтаксического сахара.

Все это дело продолжалось до 2012—2015 годов, пока не был утвержден стандарт ES6 и когда появился и стал популяризироваться разработанный корпорацией зла Его Величество TypeScript. TS позволяет писать код, аннотируя функции и переменные внутренними типами, либо, если это обременительно, использовать везде any, чтобы разработка не отличалась от стандартного JS. Встроенные типы позволяют на этапе написания кода сразу отлавливать вышеописанные ошибки и сохранять собственные силы, нервы и время. Сам код, написанный на TypeScript, компилируется в стандартный JS, поэтому проблем с запуском в браузере не имеет.

Фактически, на данный момент, TypeScript является стандартом в отрасли Web-разработки: по умолчанию идет с фреймворком Angular, существует возможность писать приложения на React с использованием JS/TS/обоих одновременнно; многие пакеты для JS либо пишутся на TypeScript, либо, если написаны на JS, имеют декларацию типов, позволяя использовать библиотеки и в проектах с TypeScript.

App.png Это не баг, а фича
МетаПрограммаDRM (SecuROMStarForceАналоговая дыра) • БагБот (Автоответчик) • Варез (Repack) • ГлюкГуйДонатКопирайт (By design) • ЛогНюкРут (Не работай под рутом) • Спортивное программированиеМегапиксельКомпьютерВерсия 2.0КодОбфускацияСкриншотДатамайнПлагинТекстовый файлБольшие данныеАльфа и бета-тестыТаймстампКэшШаблоныHello WorldНейросетиФайлИнсталляция
ФичиБагрепорт12309BSODCookiesEmbrace, extend and extinguishFL StudioSheep.exeWinlogon.exeБубенЗащита от дуракаКостыльМашинный переводПасхальные яйцаСвистелки и перделкиСм. рис. 1Съешь ещё этих мягких французских булокTermuxGNU MetroИндусский кодНескучные обои • Сжатие (За сжатие ДжипегаШакалШкала) • Работает — не трогайРандомайзерPDF (Распознавание PDF) • Дело Google в ФАСЧат-ботXMLМакросКритическая ошибка
ВредоносноеБотнетБрутфорсВинлокЗвонилкаКитайские пингвиныПиксель смертиТроянЧервь МоррисаBonziBuddyMediaGetBrowser hijackingTinderМиссис МажорУтечка буфера обмена
КомпанииApple / Apple (AppleScript) • GoogleMicrosoftSAPЯндекс
Движения8-bitOpen source (КрасноглазикиЛинуксоиды) • Вирусная сценаДаунгрейдДемосценаМоддингMMD
Офис3DS MAXGIMPGNU EmacsMovie MakerMS Paint • OpenOffice • PowerPointviMicrosoft WordExcelБлокнотФотошопАнтивирус КасперскогоAvast!TikZShareXAlternativeToСкрепышMicrosoft OfficeТекстовый редакторWeChat
ОСAndroidBSDDOSMenuetOSReactOSWindows (Phone 7Phone 878Vista) / МаздайЛинуксРусская ОСФантом ОС
БраузерыInternet ExplorerОпера / Opera • Тормозилла (ОгнелисLolifoxMozilla FirefoxFirefoxFirefox Klar) • Хром (шпионаж) • SafariЯндекс.БраузерУведомления в браузереVivaldiTor-браузер
ИнтернетAdobe Systems (Flash) • I2PLow Orbit Ion CannonTorTunatic • Чат−клиенты (MirandaQIPSkypeАськаЖабберDiscordVIPole) • HTTPSПрокси-сервер (Proxifier) • Торрент (Magnet-ссылкаΜTorrent) • JavaScriptCSSHTMLБаннермейкерИзменение TTL сетевых пакетовКапчаICQFiddlerViberZonaSteamSillyTavernWickr Me
РазработкаBrainFuckCC++C#JavaHaskellАссемблерChaos ConstructionsBATMySQLGitHubAutoHotKey (AutoHotInterception) • Sublime TextAPK (APKPureзапрет) • BASICPerlPythonPHPФорк
ЛюдиВеб-мастерLovinGODБалмерГейтсГенерал ФейлорДжобсМитникПоттерингде РаадтСпольскиСтоллманТорвальдсШахиджанянAche666Марк ЦукербергЕвгений ПоповДенис КумпонМассовая компьютерная безграмотность
КостылиCygwin • PunkBusterT9WineWishmasterАнтивирусыХакинтошСборки WindowsDenuvoЧистая установкаКалькулятор Consul WarMicrosoft StoreUBlock OriginLightshotAdBlockSearchApp.exeCPU-Z
Команды^H^WAlt+F4Ctrl+Alt+Delman/me/quitrm -rf
Internet2.png Интернеты как они есть
Это интернет, деткаДаркнетУведомления в браузереВеб-скрейпингWWWПросмотр стрима в фонеWeb ArchiveИнфоповодОткрытый проксиСайтБраузеркаБугагашечкиДейтингЗаработокИдентификация пользователейИмиджбордаИмиджхостингИнтернет-магазинИнтернет-сервисыПокровитель интернетовКаталог сайтовАссоциация блогеров и агентствОлдфагЧебурнетХейтАнкетаАватарИзоляция российских сайтовВидеохостингТильтGoogle дуракИнфобизнесменStalinism.ruРеестр запрещённых сайтовФайлообменникФотобанкХакеры, крекеры, спамы, кукиЗакат эпохи анонимусаТроллингВеб 3.0Интернет-энциклопедияСтриминговый сервисБлокировщики рекламыВеб-камераИнтернет-знаменитостьGoogle ChromeOperaMozilla FirefoxSafariFirefoxHttpHTTPSКритерий ХомакаПеревод в онлайнОблачное хранилище404 ошибкаДвухфакторная авторизацияВикипедияЭлектронная почтаРунетТвиттер
ОбщениеBadComedianГерман Клименко3,5 анонимусаБокс по перепискеПоисковая оптимизацияВирусное видеоАнальная модерацияAnonymousWebMoneyButthurtIRC (/me/quit#[email protected]) • Интернет-пейджинг (MirandaQIPСкайпАськаЖаббер) • ГостевухаЦитатникЧат (Вап-чат) • ВотсапПездузаТелеграмПсевдоинтернетКаомодзиАвтоудаление сообщенийIRC-каналЧат-ботКопипастаПлейлист
БлоггингАлександр ГагинЕвгений АнтиповXatabФильтр нецензурных выраженийБейтЦвет Чака НоррисаTelegram PremiumСкачивание видео с YouTubeЗапрет мата в социальных сетяхОбъединённая Армия БуллингаИнкубаторБлогосфераБлог (МикроблогПодкаст) • Премиум-аккаунтОбмен лайкамиОтзовикТревел блогПодписка
ГлобализацияВычислю по IPИнтернет-дебилыРаздельный интернетСинонимайзерCackleКоммунизм в интернетеBB-кодыВлоггерЗапрет анонимных сим в РоссииWAPWiki-проектыВеб 0.0Веб 1.0Веб 2.0Мобильный интернетРунетСоциальная сетьСкайнетПиндонетЗаповеди интернетаПравила интернетовОтветыФлешмоб (самые известные) • Замедление сайтаReCAPTCHA
ТипажиЧСВKillnetИнтернет-феминизмРоскомсвободаЭхо-камераРусские хакерыАдминАнонимусБелый рыцарьМодераторОптимизаторПредыдущий ораторСетевые онанистыТролльХакерЛамерКопирайтерЦифровой кочевникИнтернет-антикварИнтернет-ворАлисаМамкин циник-мизантроп
ТерминыVPNПрокси-сервер (SOCKS-прокси) • Управление репутацией404ADSLBitcoinDDoSFAQGPONI2PIPv6localhostMediaGetNO CARRIERSEOTorTOSViaWi-FiАккаунтБанБотБотнетВиртуалВордфильтрГолосование ногамиДиалапДомашняя страницаДорвейИнвайтКликбейтКомментКомьюнитиКикКириллические доменыЛесенкаЛинкЛогЛокалкаМемНикОфлайнОффтопикПисьма счастьяПоисковая бомбаПост (Некропост) • ПремодерацияПруфлинкРерайтингСабжСимпафкаСиндром вахтёраСкриншотСмайлСпамСпойлерТрафикТредТроянФлудФорумХотлинкингЭто вашеЮзерпикАнонимностьШок-сайтыПингИКСUser-AgentБраузерWhoisURLДесинкРазметка реддита🤡Цифровая некромантияЗаднеприводная каптчаЭффект АстольфоКвантовый интернетИнформационный вирусОнлайнЛайкСторисХештегPunycodeЧастный сайтПоддерживатьИнтернет-проектФорк
ПоставщикиБлокировки TOR в РоссииЦепочка проксиУчёт интернет-рекламы в РоссииProxifierПоисковые запросыСоветский интернетВеб-мастерИнтернет шоу-бизнесЛокальная сеть в масштабах страныВизуальный троллингАкадоВолгаТелекомДом.руИскраМакхостСитилайнСтримWibyЮТКЯндексПавел ДуровEMPRESSAlanWakeIP-адрес (Статический IP-адресДинамический IP-адрес) • Обход блокировкиStarlinkРоссийский интернет-форумЛарри ПейджСергей БринJavaScriptPHPOpera VPNHTMLCSSВилле ХакомякиMariaDBИзменение TTL сетевых пакетовТоррент (ΜTorrentMagnet-ссылка) • Archive TeamАрхив АнныАркадий ВоложСпам-листСтримТеле2NamecheapРостелекомБезопасная юрисдикция
МемыНюдсочетвергОтпечаток браузераТроллинг тупостьюSpecial OlympicsВ Интернете кто-то неправЮзерCMS.tkЛахтаЧел из инета.onionSkotobaza.orgВселенная СамосбораТоррент-трекерТупичок ГоблинаАська-однодневкаМясо, матюки, убийства и голые сиськиГенерация интернет-контентаВебкам-студияЦифровой петухВархаммер против пониTilt (Google)Проход в хохлыШитпостингДизлайкНьюфагНоворегЗакрепАноним хуже содомитаВебпанкВейшнорияРина ПаленковаЗакулисьеИнландияБурление говнКапчаOchko123А мы смеемся и просим ещёОнлайн-петицияSCP-166Животные за компьютеромКарма (интернет-сайты)Бомбит пуканБаннерыАнтиспамPrizrak Night-ForestИдиотекаБесконечный эпизод Губки БобаСтикерыМария ИльинаBasedgeТестыСвободолюбие Павла ДуроваКакой-то не такой текстингЕкатерина МизулинаМетаиронияГенератор имёнКопротивлениеСлова-маркеры идиотаКопирование текстов онлайнНовый логотип ТвиттераДжулиан АссанжВсё, что попало в интернет, остаётся там навсегдаЦерковь СамсоноверыThe Internet is for something wrongMulter.ruОтрывокКремниевая пирамидаNostalgy.net.ru
Проблемы и злоВозрастное ограничениеЦензура в TelegramПлатный поиск в ИнтернетеТебя в гугле забанилиАвтозамена на проксиБитва за Le Cosy MontparnasseСпамботАлгоритм НемезидаРевью-бомбингТроллинг верификации в ТвиттереРеклама в ТелеграмеИнтернет-луддитыКукловодТуалетный профильБаяновая революцияЗахват сервераСлив файлов Яндекса в январеКопирование и вставка текста на сайтах с запретомЗамена словОтключение интернетаЦензура в социальных сетяхАвторские праваСкрытый банУтечка данныхШокирующее видеоСимпРоскомнадзор (Роскомнадзор-тян) • СрачХайпЦифровизацияЦифровой следИнтернет-цензураИдентификация пользователей Wi-FiЧёрный списокАккаунт угналиФейкЗабастовка на реддите из-за платного APIAutoModeratorОбида на клоунаСтена текстаДисконнектВзлом электронной почтыФактчекИнтернет-ракАттеншен вхореДобровольно-принудительная регистрацияИзгнание ДуроваБлокировка сайтов по беспределуМ125Виртуальные инстаграмщицыПоломка зоны .ru в январе 2024 года
Movax1010h.png Глубокий смысл скрыт в этих неестественных языках
Языки программированияПромышленные: BATC#CC++JavaJavaScript (AJAX) • PascalPerlPHPPythonRubyABAPАссемблерВасикФортран
Эзотерические: BrainFuckHQ9++ErlangForthHaskellLISP (My other car) • PrologTclΤΕΧOracleMySQLGolangВ++
ПрофессииБыдлокодерПрограммистТестировщикХакерХеллоуворлдщикIT-звёзды
Методы и стилиReverse EngineeringАнти-паттернВыстрелить себе в ногуГрязный хакКод (индусский) • КостыльМетод научного тыкаПомолясьСвистелки и перделкиОчередьСпортивное программированиеОбфускацияБета-тестАльфа-тестШаблоныRegReplace
Средства разработкиSublime TextПодсветка синтаксиса кодаUnstable DiffusionAPIPythonTutorCodeWarsDataCamp
ЛюдиИлья КанторЮрий КлючевскийЭдуард Лаас
Прочее++i + ++iDeadline%s640 килобайтCMSDummy modeЕГГОГFoobarGod is real, unless explicitly declared as integerGOTOIfconfigKISSRegExpSICPsql.ruXyzzyДискетаИнжалид дежицеКОИ-8ЛогМанРекурсияСУБДТест ТьюрингаУмение разбираться в чужом кодеФаза ЛуныФатальный недостатокПроблема 2000ТаймстампКэшЗапись в файл без кэша (Perl)Танцы с бубномКодач