javascript — вопросы с ответами

JavaScript – это сценарный и программный язык, позволяющий браузерам пользователей реализовывать сложные объекты на веб-страницах. Каждый раз, когда веб-страница делает больше, чем просто простаивает и отображает статическую информацию, а показывает своевременные обновления контента, интерактивные карты, анимированную 2D/3D-графику, автоматически проигрывает видео и т. д., вы можете быть уверены в задействовании JavaScript.

История создания

Разработка JavaScript началась в 1995 году в компании Netscape Communications, которая также является создателем популярного в то время браузера Netscape. Разработчики поняли, что добавление "связующего языка" для улучшения взаимодействия с пользователями в интернете улучшит его восприятие. Поэтому они наняли Брендана Эйха для встраивания языка программирования Scheme. Однако в то время уже был один очень популярный язык веб-программирования – Java. Так что руководители компании решили сделать свой язык ближе по синтаксису к Java. Результатом их работы стал JavaScript, обладающий функционалом Scheme, объектной ориентацией SmallTalk и синтаксисом Java.

Это интересно: первая версия этого языка изначально называлась Mocha, но уже в сентябре 1995 года он был переименован в LiveScript, а затем еще раз переименована в JavaScript в декабре 1995 года.

В 1996 году JavaScript был представлен в ECMA International для доработки своей основной спецификации. В июне 1997 года была выпущена первая официальная версия в качестве языка ECMA-262. Последняя версия языка – ECMAScript 2017, выпущена в июне 2017 года.

Почему JavaScript стал популярен?

Раньше компьютеры работали намного медленнее, а браузеры плохо взаимодействовали с JavaScript. И так как большинство разработчиков работали с серверной частью приложения в интернете, JavaScript в то время мог показаться не очень хорошим выбором.

С другой стороны, стоимость хостинга файлов была очень высокой. Вот тут-то и пригодился JavaScript: он выполняется на компьютерах пользователей, когда они получают доступ к странице, тем самым делая любую работу в JavaScript незаметной для серверных мощностей. Следовательно, все процессы происходят на стороне клиента. Это сделало сайты намного более отзывчивыми для обычного пользователя и менее дорогостоящими с точки зрения трафика.

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

Триада веб-страниц

При рассмотрении компонентов современной веб-страницы можно заметить, что главные роли в ее основе играют следующие элементы: JavaScript, HTML, CSS.

HTML содержит информацию о веб-странице, включая текст, графику и пр. CSS используется для управления настройками внешнего вида страницы, включая цвета, шрифты и пр. JavaScript используется для добавления динамических компонентов на веб-страницу и создает большинство программируемых элементов на ней.

Недостатки использования JavaScript

Но даже со всеми этими плюсами возникает одна загвоздка: JavaScript нестабилен. Не сам язык, а среда, в которой он реализован. Вы не знаете, какой компьютер находится на обратной стороне веб-страницы; вы не знаете, насколько этот компьютер загружен другими процессами; не знаете, открыт ли на другой вкладке еще один JavaScript. Пока браузеры не получат систему распределения отдельных ресурсов обработки для разных вкладок и окон (также называемые потоками), это всегда будет оставаться проблемой. Впрочем, подобие многопоточности в определенной степени было реализовано благодаря новой функции HTML5, называемой Web worker.

Что можно сделать с помощью JavaScript?

JavaScript – это полноценный интерпретатор языка программирования, встроенный в ваш веб-браузер. В JavaScript вы можете делать все, что позволяет обычный язык, такой как Java. Например:

  • Объявлять переменные;
  • Сохранять и получать значения;
  • Определять и вызывать функции;
  • Определять свои собственные классы;
  • Загружать и использовать внешние модули;
  • Создавать обработчики событий, которые отвечают на пользовательские и другие события;
  • И многое другое.

Веб-браузер загружает страницу, анализирует HTML и создает из содержимого так называемую объектную модель документа (DOM). DOM представляет в реальном времени веб-страницу для вашего кода JavaScript. Затем ваш код может обновлять DOM и мгновенно представлять его пользователю. Браузер также позволяет вам регистрировать свой код, чтобы получать уведомления о событиях в пользовательском интерфейсе, таких как движение мыши, нажатие кнопок и т. д. Используя все эти средства, вы можете создавать маленькие (и не очень маленькие) классные приложения, которые будут служить любой задуманной вами цели.

Предупреждение: поскольку JavaScript является таким многогранным языком, его можно использовать и для создания вредоносных программ, вирусов, интернет угонщиков и других неприятных вещей, направленных на причинение вреда пользователям. Их задачи варьируются от кражи cookie-файлов браузера, паролей и кредитных карт до загрузки вирусов на ваш компьютер.

Что нельзя сделать с помощью JavaScript?

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

Примеры таких ограничений:

  • JavaScript на веб-странице не имеет права читать или записывать файлы на жестком диске компьютера, копировать их или запускать приложения. Он не имеет прямого доступа к системным функциям ОС;
  • Современные браузеры позволяют ему работать с файлами, но доступ к ним ограничен и предоставляется только в том случае, если пользователь выполняет определенные действия, такие как "перетаскивание" файла в окно браузера или выбор его с помощью тега <input>;
  • Имеются способы взаимодействия с камерой/микрофоном и другими устройствами, но они требуют полного разрешения пользователя. Таким образом, страница с поддержкой JavaScript не может незаметно включить веб-камеру, наблюдать за окружением и отправлять информацию органам правопорядка;
  • Различные вкладки/окна вообще не знают друг о друге. Иногда они это понимают, например, при использовании JavaScript одним окном для открытия другого. Но даже в этом случае JavaScript с одной страницы не может получить доступ к другой, если они открыты с разных сайтов (из другого домена, протокола или порта). Это называется «Правилом ограничения домена». Чтобы обойти это правило, обе страницы должны содержать специальный код JavaScript, который обрабатывает обмен данными;
  • JavaScript может легко общаться через сеть с сервером, с которого пришла текущая страница. Но его способность получать данные с других сайтов/доменов ограничена. Хотя это все-таки возможно при полном разрешении (выраженного в заголовках HTTP) с удаленной стороны. Это еще одна мера безопасности.

Как работает JavaScipt?

JavaScript – это то, что называется клиентским скриптом. Большинство веб-приложений, таких как поисковая система, работают из-за взаимодействия между устройством пользователя (например, компьютером, телефоном или планшетом) и удаленным сервером. Программное обеспечение на удаленном сервере отправляет информацию клиенту (то есть машине пользователя), а программное обеспечение на стороне клиента считывает информацию и отображает веб-страницу на экране.

Клиентский скрипт – это язык программирования, который полностью выполняет свои задачи на компьютере клиента и не требует взаимодействия с сервером для работы. Например, если на вашем компьютере загружена веб-страница и ваш интернет-провайдер отключается, вы все равно можете взаимодействовать с веб-страницами, уже загруженными в ваш браузер. Однако вы не сможете переходить на новые веб-страницы или получать доступ к удаленным данным.

Вот некоторые из динамических особенностей веб-сайтов, выполняемые JavaScript:

  • Автозаполнение;
  • Загрузка нового содержимого или данных на страницу без перезагрузки страницы;
  • Эффекты ролловера и выпадающие меню;
  • Анимация элементов страницы, таких как затухание, изменение размера или перемещение;
  • Воспроизведение аудио и видео;
  • Проверка ввода из веб-форм;
  • Устранение проблем совместимости браузера.

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

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

В фоновом режиме JavaScript читает буквы по мере их ввода пользователем, отправляет эти письма на удаленный сервер, а сервер отправляет скомпилированные предложения обратно.

Программное обеспечение на стороне сервера анализирует слова и запускает алгоритмы, чтобы предвидеть поисковый запрос пользователя. Такие программы чертовски велики и сложны. А JavaScript на компьютере клиента настолько прост и мал, насколько это возможно, чтобы не замедлять взаимодействие с пользователем. Связь между JavaScript и серверной программой ограничена пропускной способностью пользователя. Вот почему разработчики отдают приоритет эффективности JavaScript-функций и делают объем данных, передаваемых между программами, как можно меньшим.

Только после того, как пользователь выберет критерии поиска, вся страница перезагрузится и выдаст результаты поиска. Движки наподобие того, которым владеет Google, сократили или полностью исключили необходимость перезагрузки даже на этом этапе. Они просто дают результаты, используя один и тот же асинхронный процесс.

Будущее JavaScript

Хотя JavaScript не является единственным клиентским сценарным языком в Интернете, он был одним из первых и до сих пор имеет широкое распространение. Многие разработчики считают, что JavaScript неэффективен и привередлив, поэтому за годы его существования они внесли в него множество улучшений. Предприимчивые программисты создали библиотеки JavaScript – более компактные языки, построенные на основе JavaScript. Они менее сложные и могут быть предназначены для конкретных приложений.

20 ответов
У меня есть переменная в PHP, и мне нужно ее значение в моем JavaScript-коде. Как я могу получить свою переменную от PHP до JavaScript? У меня есть код, который выглядит так: <?php ... $val = $myService->getValue(); // makes an api and db call ?> У меня есть JavaScript-код, котор...
19 май 2014, в 15:41
3 ответа
Я ищу, чтобы найти лучшие практики для сохранения данных Angularjs в приложении PhoneGap. Я использую Ionic Framework поверх этого, но не относящийся к этому вопросу, поскольку он просто построен поверх Angular и Cordova. Мне нравится, что Angular остается гибким в решениях сохранения данных, это им...
cordova
persistence
17 май 2014, в 19:34
4 ответа
У меня возникла проблема с приложением PhoneGap, которое было создано как для Android, так и для iOS. На iOS и большинстве Android-устройств он отлично работает, за исключением Samsung Galaxy S3 и S4. При загрузке первой страницы приложение создает локальную базу данных SQL. Эта база данных использу...
18 нояб. 2013, в 22:55
6 ответов
У меня есть этот код: <script type="text/javascript"> var foo = 'bar'; <?php file_put_contents('foo.txt', ' + foo + '); ?> var baz = <?php echo 42; ?>; alert(baz); </script> Почему это не записывает "бар" в мой текстовый файл, но предупреждает "4...
client-side
server-side
12 дек. 2012, в 11:22
6 ответов
У меня есть набор файлов HTML и база данных SQLite, с которой я хотел бы получить доступ из браузера, используя схему file://. Возможно ли получить доступ к базе данных и создать запросы (и таблицы) с помощью JavaScript?
02 нояб. 2012, в 08:05
7 ответов
Я чувствую себя немного толстым в этот момент. Я потратил дни, пытаясь полностью обернуть голову вокруг конструкции дерева суффиксов, но поскольку у меня нет математического фона, многие из объяснений ускользают от меня, когда они начинают чрезмерно использовать математическую символику. Самое близк...
algorithm
search
suffix-tree
26 фев. 2012, в 10:59
13 ответов
Я хочу использовать AngularJS с Django, но оба они используют {{ }} в качестве тегов шаблонов. Есть ли простой способ изменить один из двух, чтобы использовать другой пользовательский шаблонный тег?
django-templates
28 нояб. 2011, в 20:31
4 ответа
Можно ли сделать расширение chrome, которое взаимодействует с базой данных sqlite так же, как расширение Firefox? Не могли бы вы дать мне совет или ссылку, где больше информации о разработке расширения chrome, взаимодействующего с sqlite? Благодарю вас...
google-chrome-extension
01 июнь 2011, в 11:32
3 ответа
Я считаю, что виджет Django Admin по умолчанию models.ManyToManyField является громоздким для использования. Это элемент HTML select, и если у вас много объектов "другой" модели, то совершенно нецелесообразно фактически находить "другие" объекты вы хотите связать с "this" Object. И если у вас есть ...
django-admin
html-select
22 март 2011, в 01:35
11 ответов
Я пытаюсь отправить данные из формы в базу данных. Вот форма, которую я использую: <form name="foo" action="form.php" method="POST" id="foo"> <label for="bar">A bar</label> <input id="bar" name="bar" type="text" value="" /> <input type="submit" value="Send" /&g...
15 фев. 2011, в 13:11
17 ответов
У меня есть строка, которая выглядит так: 0000000020C90037: TEMP: данные И мне нужно захватить все после первого двоеточия, так что у меня есть TEMP: data. Я не часто работаю в Javascript, если бы это был PHP, я бы это сделал: $str = '0000000020C90037:TEMP:data'; $arr = explode(":", $str); $var = ...
string
22 дек. 2010, в 23:19
15 ответов
Нам нужно увидеть, какие методы/поля имеет объект в Javascript.
27 нояб. 2008, в 11:11
11 ответов
Когда я создаю страницу с помощью средства визуализации Django, я могу передать переменную словаря, содержащую различные значения, чтобы манипулировать ими на странице с помощью {{ myVar }}. Есть ли способ получить доступ к одной и той же переменной в Javascript (возможно, используя DOM, я не знаю, ...
django-templates
google-app-engine
18 нояб. 2008, в 12:50
14 ответов
Что является самым простым способом кодирования строки PHP для вывода в переменную JavaScript? У меня есть строка PHP, которая включает в себя цитаты и новые строки. Мне нужно, чтобы содержимое этой строки помещалось в переменную JavaScript. Обычно я просто создаю свой JavaScript в файле PHP, à la: ...
escaping
newline
03 окт. 2008, в 17:50
10 ответов
Лучшие рекомендации по доступу и обработке баз данных sqlite из JavaScript.
15 сен. 2008, в 08:02
Наверх
Меню