JavaScript. Introduction (in russian)

Mikhail Davydov
Mikhail DavydovJavaScript & Node.js Developer at Yandex
JavaScript. Introduction (in russian)
Михаил Давыдов
Разработчик JavaScript
JavaScript
3
История
•  Брендан Айх
•  1995 год, Netscape
•  Цель – альтернатива VBScript
•  Разработан за 15 дней
•  Имя JavaScript – маркетинговый ход
4
ECMAScript и JavaScript
•  JavaScript (c) Oracle Corporation
•  JScript=JavaScript
•  Основывается на стандарте ECMAScript
•  Текущая версия ECMAScript – 5.1
•  Все пишут на ECMAScript – 3
•  Новые версии сохраняют совместимость
Особенности языка
Виртуальная машина
Автоматическое приведение типов
Утиная типизация
Мультипарадигменный
6
Виртуальная машина
DOM	
  VM	
  JS	
  
Среда	

Виртуалка	

GUI	
  
Интерфейс
7
Автоматическое приведение типов
•  2 + “3” == “23”!
•  2 + 3 == 5!
•  [] + 1 == “1”!
•  if ([1, 2, 4]) {}!
•  0 == “0”!
8
Если оно выглядит как утка, плавает как утка и крякает как утка, то это,
вероятно, утка и есть.
var Duck = {
lookLikeDuck: true,
quackLikeDuck: true,
swimLikeDuck: true,
};
if (a.lookLikeDuck &&
a.quackLikeDuck &&
a.swimLikeDuck) {
return “Это Утка!”;
}
Утиная типизация
9
Мультипарадигменный
•  Очень гибкий
•  Функциональный подход
•  Классовый подход
–  Классов в JavaScript нет
•  Прототипный подход
10
Используется библиотека Mootools!
var Animal = new Class({
initialize: function(age){
this.age = age;
}
});
var Cat = new Class({
Extends: Animal,
initialize: function(name, age){
this.parent(age);
this.name = name;
}
});
var myCat = new Cat('Pewpew', 20);
alert(myCat.name);
alert(myCat.age);
Классовый подход
11
Используется ECMAScript 5.1
var items = [1, 2, 3, 4, {}];
var result = items.filter(function (item) {
return typeof item === “number”;
})
.map(function (item) {
return item * 2;
})
.every(function (item) {
return item > 2;
});
alert(result); // false
Функциональный подход
12
var Animal = function(age){
this.age = age;
};
var Cat = function(name, age){
Animal.call(this, age);
this.name = name;
}
Cat.prototype = new Animal();
var myCat = new Cat('Pewpew', 20);
alert(myCat.name);
alert(myCat.age);
Прототипный подход
Распространение
Поддержка языка
Распостраненность
Популярность
14
Разработка языка
•  Google
•  Mozilla
•  Microsoft
•  Opera
•  Apple
•  Oracle
•  …
15
Распостраненность языка
•  Есть практически в любом устройстве
–  Компьютеры
–  Телевизоры
–  Планшеты
–  Телефоны
•  Есть и на сервере
–  Серверный JavaScript – Node.js, Narwal, Rhino
–  Встроенная Виртуальаня машина в БД
•  Можно программировать железо
–  Arduino + johnny-five
•  Не только браузер
–  Microsoft Office
–  OpenOffice.org
–  PDF
16
Распостраненность языка
•  Огромное число библиотек для всего
–  DOM
–  2D графика
–  3D графика
–  Работа со звуком
•  Транслирование в JavaScript
–  CoffeeScript
–  Dart
–  TypeScript
•  Возможно это самая распостраненная
виртуальная машина
17
Популярность языка
•  Низкий порог входа
–  Блокнот и браузер
•  № 1 на Github
•  TIOBE Index – 11 место
–  Год назад 12
Проблемы языка
XSS
Открытый код
Асинхронное программирование
19
Проблемы безопасности
•  XSS
–  Атака на пользовательскую страницу
–  Хищение сессионных данных
–  Порча данных
–  Боты
–  DDOS
•  Тщательная обработка полей
–  Важно проверять все входные данные
•  Ваш скрипт не единственный на странице
–  Плагины
–  Пользовательские скрипты
–  Боты
–  Вирусы
20
<form>
<input id="name">
</form>
My name is <span id="result"></span>
XSS
var inputName = document.getElementById("name"),
result = document.getElementById("result");
inputName.addEventListener("keyup", function () {
result.innerHTML = inputName.value;
}, false);
http://jsfiddle.net/FfXaJ/2/
21
<img src="a" onerror="alert(0)"/>
Демки
2D
3D
Видео
Мобильные приложения
Firefox OS
23
2D – Графики
http://www.humblesoftware.com/flotr2
24
2D – Игры
http://playbiolab.com/
25
3D – WebGL, Three.js
http://mrdoob.github.com/three.js/
26
Видео
http://media.chikuyonok.ru/ambilight/
27
PhoneGap
- Карты
- Контакты
- Звонки
- Компас
- GPS
- Акселометр
http://phonegap.com/
28
LinkedIn Mobile
29
Firefox Mobile OS
Наш рабочий процесс
31
Инструменты
• http://jsfiddle.net/
• http://jslint.com/
32
a=function(b)
{
if(b)return 1
};a();
Качество кода
var█a█=█function█(b)█{
if█(b)█{
return 1;
}
};
a();
http://jsfiddle.net/4En9B/	

http://jsfiddle.net/4En9B/1/
33
Задание 1
•  Причесать ваш код из тестового задания
•  Ваш скрипт должен лежать отдельно от html
•  Нужно отформатировать код
–  Использовать http://jslint.com/
–  Или выбрать свой кодстайл
•  Обратить внимание
–  Наличие var
–  Отступы рядом с =, операторами и function
–  Или табы или пробелы
–  Заменить new Array() на []; new Object() на {};
Михаил Давыдов
Разработчик JavaScript
azproduction@yandex-team.ru
Спасибо
1 of 34

Recommended

Эволюция разработки (Ермаков Игорь), Форум технологий Mail.Ru Group by
Эволюция разработки (Ермаков Игорь), Форум технологий Mail.Ru GroupЭволюция разработки (Ермаков Игорь), Форум технологий Mail.Ru Group
Эволюция разработки (Ермаков Игорь), Форум технологий Mail.Ru Grouptfmailru
1.8K views22 slides
Node by
NodeNode
NodeЮрій Кучма
135 views8 slides
#1 "JSib – Знакомство и амбициозные планы" Денис Речкунов by
#1 "JSib – Знакомство и амбициозные планы" Денис Речкунов#1 "JSib – Знакомство и амбициозные планы" Денис Речкунов
#1 "JSib – Знакомство и амбициозные планы" Денис РечкуновJSib
618 views15 slides
Компонентная разработка на Stylus, Jade, Typescript - Леонид Ширманов by
Компонентная разработка на Stylus, Jade, Typescript - Леонид ШирмановКомпонентная разработка на Stylus, Jade, Typescript - Леонид Ширманов
Компонентная разработка на Stylus, Jade, Typescript - Леонид ШирмановMoscowJS
2.5K views34 slides
Frontend - экосистема и будущее: iforum 2015 by
Frontend - экосистема и будущее: iforum 2015Frontend - экосистема и будущее: iforum 2015
Frontend - экосистема и будущее: iforum 2015Eldar Djafarov
1.8K views28 slides
Язык программирования PHP. EasyCode. Стартовая презентация. by
Язык программирования PHP. EasyCode. Стартовая презентация.Язык программирования PHP. EasyCode. Стартовая презентация.
Язык программирования PHP. EasyCode. Стартовая презентация.Nikolaj Sarry
418 views20 slides

More Related Content

What's hot

PG Day'14 Russia, PostgreSQL в avito.ru, Михаил Тюрин by
PG Day'14 Russia, PostgreSQL в avito.ru, Михаил ТюринPG Day'14 Russia, PostgreSQL в avito.ru, Михаил Тюрин
PG Day'14 Russia, PostgreSQL в avito.ru, Михаил Тюринpgdayrussia
807 views31 slides
Путь к Go на конкретном примере by
Путь к Go на конкретном примереПуть к Go на конкретном примере
Путь к Go на конкретном примереSergey Xek
805 views38 slides
Drupal cafe 1.1 by
Drupal cafe 1.1Drupal cafe 1.1
Drupal cafe 1.1Artem Zigar
181 views16 slides
Artem Zigar. Development Tools. Readability of a code. by
Artem Zigar. Development Tools. Readability of a code.Artem Zigar. Development Tools. Readability of a code.
Artem Zigar. Development Tools. Readability of a code.DrupalSib
828 views15 slides
Современный фронтенд за 30 минут. by
Современный фронтенд за 30 минут.Современный фронтенд за 30 минут.
Современный фронтенд за 30 минут.Vladimir Malyk
2.6K views48 slides
13 HappyDev-lite-2015 autumn. Руслан Шарипов. Ruby, making programmers happy. by
13 HappyDev-lite-2015 autumn. Руслан Шарипов. Ruby, making programmers happy.13 HappyDev-lite-2015 autumn. Руслан Шарипов. Ruby, making programmers happy.
13 HappyDev-lite-2015 autumn. Руслан Шарипов. Ruby, making programmers happy.HappyDev-lite
293 views29 slides

What's hot(19)

PG Day'14 Russia, PostgreSQL в avito.ru, Михаил Тюрин by pgdayrussia
PG Day'14 Russia, PostgreSQL в avito.ru, Михаил ТюринPG Day'14 Russia, PostgreSQL в avito.ru, Михаил Тюрин
PG Day'14 Russia, PostgreSQL в avito.ru, Михаил Тюрин
pgdayrussia807 views
Путь к Go на конкретном примере by Sergey Xek
Путь к Go на конкретном примереПуть к Go на конкретном примере
Путь к Go на конкретном примере
Sergey Xek805 views
Artem Zigar. Development Tools. Readability of a code. by DrupalSib
Artem Zigar. Development Tools. Readability of a code.Artem Zigar. Development Tools. Readability of a code.
Artem Zigar. Development Tools. Readability of a code.
DrupalSib828 views
Современный фронтенд за 30 минут. by Vladimir Malyk
Современный фронтенд за 30 минут.Современный фронтенд за 30 минут.
Современный фронтенд за 30 минут.
Vladimir Malyk2.6K views
13 HappyDev-lite-2015 autumn. Руслан Шарипов. Ruby, making programmers happy. by HappyDev-lite
13 HappyDev-lite-2015 autumn. Руслан Шарипов. Ruby, making programmers happy.13 HappyDev-lite-2015 autumn. Руслан Шарипов. Ruby, making programmers happy.
13 HappyDev-lite-2015 autumn. Руслан Шарипов. Ruby, making programmers happy.
HappyDev-lite293 views
Current State of Server Side JavaScript by Oleg Podsechin
Current State of Server Side JavaScriptCurrent State of Server Side JavaScript
Current State of Server Side JavaScript
Oleg Podsechin693 views
Разработка API для большого, нагруженного сервиса by endeveit
Разработка API для большого, нагруженного сервисаРазработка API для большого, нагруженного сервиса
Разработка API для большого, нагруженного сервиса
endeveit1.7K views
JavaScript on frontend and backend (in Russian by Mikhail Davydov
JavaScript on frontend and backend (in RussianJavaScript on frontend and backend (in Russian
JavaScript on frontend and backend (in Russian
Mikhail Davydov764 views
Say Perl на весь мир by Andrew Shitov
Say Perl на весь мирSay Perl на весь мир
Say Perl на весь мир
Andrew Shitov818 views
Данил Ильиных и Владимир Иванов, «Велогосипед» by Platonov Sergey
Данил Ильиных и Владимир Иванов, «Велогосипед»Данил Ильиных и Владимир Иванов, «Велогосипед»
Данил Ильиных и Владимир Иванов, «Велогосипед»
Platonov Sergey1.4K views
Server Side Javascript (ru) by Bakyt Niyazov
Server Side Javascript (ru)Server Side Javascript (ru)
Server Side Javascript (ru)
Bakyt Niyazov797 views
Фронтенд разработка без боли by Anton Piskunov
Фронтенд разработка без болиФронтенд разработка без боли
Фронтенд разработка без боли
Anton Piskunov3.1K views
Как сделать сложное простым. История создания Проект1917 / Сергей Спорышев (I... by Ontico
Как сделать сложное простым. История создания Проект1917 / Сергей Спорышев (I...Как сделать сложное простым. История создания Проект1917 / Сергей Спорышев (I...
Как сделать сложное простым. История создания Проект1917 / Сергей Спорышев (I...
Ontico427 views
Юрий Насретдинов, Badoo by Ontico
Юрий Насретдинов, BadooЮрий Насретдинов, Badoo
Юрий Насретдинов, Badoo
Ontico1.5K views
Real-time данные на фронтенде by EXANTE
Real-time данные на фронтендеReal-time данные на фронтенде
Real-time данные на фронтенде
EXANTE686 views
ОЛЕКСАНДР ХОТЕМСЬКИЙ «Антипаттерни та велосипеди в JavaScript автоматизації» ... by GoQA
ОЛЕКСАНДР ХОТЕМСЬКИЙ «Антипаттерни та велосипеди в JavaScript автоматизації» ...ОЛЕКСАНДР ХОТЕМСЬКИЙ «Антипаттерни та велосипеди в JavaScript автоматизації» ...
ОЛЕКСАНДР ХОТЕМСЬКИЙ «Антипаттерни та велосипеди в JavaScript автоматизації» ...
GoQA39 views
Что такое современная Frontend разработка by DevOWL Meetup
Что такое современная Frontend разработкаЧто такое современная Frontend разработка
Что такое современная Frontend разработка
DevOWL Meetup189 views

Viewers also liked

JavaScript. История, развитие, перпективы by
JavaScript. История, развитие, перпективыJavaScript. История, развитие, перпективы
JavaScript. История, развитие, перпективыДмитрий Вальков
364 views18 slides
Подробная презентация JavaScript 6 в 1 by
Подробная презентация JavaScript 6 в 1Подробная презентация JavaScript 6 в 1
Подробная презентация JavaScript 6 в 1Vasya Petrov
799 views90 slides
Дэвид Флэнаган — Javascript (5 издание) by
Дэвид Флэнаган — Javascript (5 издание)Дэвид Флэнаган — Javascript (5 издание)
Дэвид Флэнаган — Javascript (5 издание)mlatushko
3K views982 slides
Алексей Воинов — Языки программирования by
Алексей Воинов — Языки программированияАлексей Воинов — Языки программирования
Алексей Воинов — Языки программированияYandex
3K views55 slides
Кратчайшая история JavaScript by
Кратчайшая история JavaScriptКратчайшая история JavaScript
Кратчайшая история JavaScriptPavel Klimiankou
885 views27 slides
Александр Кашеверов - Коротко про WEB by
Александр Кашеверов - Коротко про WEBАлександр Кашеверов - Коротко про WEB
Александр Кашеверов - Коротко про WEBDataArt
488 views38 slides

Viewers also liked(6)

Подробная презентация JavaScript 6 в 1 by Vasya Petrov
Подробная презентация JavaScript 6 в 1Подробная презентация JavaScript 6 в 1
Подробная презентация JavaScript 6 в 1
Vasya Petrov799 views
Дэвид Флэнаган — Javascript (5 издание) by mlatushko
Дэвид Флэнаган — Javascript (5 издание)Дэвид Флэнаган — Javascript (5 издание)
Дэвид Флэнаган — Javascript (5 издание)
mlatushko3K views
Алексей Воинов — Языки программирования by Yandex
Алексей Воинов — Языки программированияАлексей Воинов — Языки программирования
Алексей Воинов — Языки программирования
Yandex3K views
Кратчайшая история JavaScript by Pavel Klimiankou
Кратчайшая история JavaScriptКратчайшая история JavaScript
Кратчайшая история JavaScript
Pavel Klimiankou885 views
Александр Кашеверов - Коротко про WEB by DataArt
Александр Кашеверов - Коротко про WEBАлександр Кашеверов - Коротко про WEB
Александр Кашеверов - Коротко про WEB
DataArt488 views

Similar to JavaScript. Introduction (in russian)

Interactive Lab: Разработка Flash игр на Unity3D by
Interactive Lab: Разработка Flash игр на Unity3DInteractive Lab: Разработка Flash игр на Unity3D
Interactive Lab: Разработка Flash игр на Unity3DDevGAMM Conference
1.2K views13 slides
Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.) by
Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)
Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)Ontico
1.7K views43 slides
"Подходы, используемые в разработке iOS-клиента Viber" Кирилл Лашкевич (Viber) by
"Подходы, используемые в разработке iOS-клиента Viber" Кирилл Лашкевич (Viber)"Подходы, используемые в разработке iOS-клиента Viber" Кирилл Лашкевич (Viber)
"Подходы, используемые в разработке iOS-клиента Viber" Кирилл Лашкевич (Viber)AvitoTech
837 views77 slides
Daemons In Web on #devrus by
Daemons In Web on #devrusDaemons In Web on #devrus
Daemons In Web on #devrusAlex Chistyakov
1.3K views42 slides
Xe4 launch мобильная разработка всеволод_леонов by
Xe4 launch мобильная разработка всеволод_леоновXe4 launch мобильная разработка всеволод_леонов
Xe4 launch мобильная разработка всеволод_леоновЕкатерина Макарова
969 views65 slides
Platypus platform ivbit by
Platypus platform ivbitPlatypus platform ivbit
Platypus platform ivbitjskonst
6.3K views29 slides

Similar to JavaScript. Introduction (in russian)(20)

Interactive Lab: Разработка Flash игр на Unity3D by DevGAMM Conference
Interactive Lab: Разработка Flash игр на Unity3DInteractive Lab: Разработка Flash игр на Unity3D
Interactive Lab: Разработка Flash игр на Unity3D
DevGAMM Conference1.2K views
Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.) by Ontico
Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)
Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)
Ontico1.7K views
"Подходы, используемые в разработке iOS-клиента Viber" Кирилл Лашкевич (Viber) by AvitoTech
"Подходы, используемые в разработке iOS-клиента Viber" Кирилл Лашкевич (Viber)"Подходы, используемые в разработке iOS-клиента Viber" Кирилл Лашкевич (Viber)
"Подходы, используемые в разработке iOS-клиента Viber" Кирилл Лашкевич (Viber)
AvitoTech837 views
Platypus platform ivbit by jskonst
Platypus platform ivbitPlatypus platform ivbit
Platypus platform ivbit
jskonst6.3K views
Баба Яга против! by Roman Dvornov
Баба Яга против!Баба Яга против!
Баба Яга против!
Roman Dvornov1.3K views
TК°Conf. Организация разработки Frontend. Виталий Слободин. by TKConf
TК°Conf. Организация разработки Frontend. Виталий Слободин.TК°Conf. Организация разработки Frontend. Виталий Слободин.
TК°Conf. Организация разработки Frontend. Виталий Слободин.
TKConf156 views
Фронтенд в Яндексе by Yandex
Фронтенд в ЯндексеФронтенд в Яндексе
Фронтенд в Яндексе
Yandex845 views
Обзор перспективных баз данных для highload / Юрий Насретдинов by Ontico
Обзор перспективных баз данных для highload / Юрий НасретдиновОбзор перспективных баз данных для highload / Юрий Насретдинов
Обзор перспективных баз данных для highload / Юрий Насретдинов
Ontico1.8K views
Scripting languages by Lev Panov
Scripting languagesScripting languages
Scripting languages
Lev Panov777 views
Профессиональная разработка в суровом Enterprise by Alexander Granin
Профессиональная разработка в суровом EnterpriseПрофессиональная разработка в суровом Enterprise
Профессиональная разработка в суровом Enterprise
Alexander Granin1.1K views
Встраивание Python в мобильные приложения – нюансы interoperation, новые подх... by Anthony Marchenko
Встраивание Python в мобильные приложения – нюансы interoperation, новые подх...Встраивание Python в мобильные приложения – нюансы interoperation, новые подх...
Встраивание Python в мобильные приложения – нюансы interoperation, новые подх...
Anthony Marchenko1.7K views
Баба-Яга против! — Роман Дворнов, Ostrovok.ru by Yandex
Баба-Яга против! — Роман Дворнов, Ostrovok.ruБаба-Яга против! — Роман Дворнов, Ostrovok.ru
Баба-Яга против! — Роман Дворнов, Ostrovok.ru
Yandex1.3K views
Desktop app based on node js and html5 by Provectus
Desktop app based on node js and html5Desktop app based on node js and html5
Desktop app based on node js and html5
Provectus765 views
Фронтенд в Яндексе by Yandex
Фронтенд в ЯндексеФронтенд в Яндексе
Фронтенд в Яндексе
Yandex527 views
Фронтенд в Яндексе by Yandex
Фронтенд в ЯндексеФронтенд в Яндексе
Фронтенд в Яндексе
Yandex342 views
Как сделать веб-карту, сохранить здоровье и возненавидеть IE by Артём Кудзев
Как сделать веб-карту, сохранить здоровье и возненавидеть IEКак сделать веб-карту, сохранить здоровье и возненавидеть IE
Как сделать веб-карту, сохранить здоровье и возненавидеть IE

More from Mikhail Davydov

Components now! (in russian) by
Components now! (in russian)Components now! (in russian)
Components now! (in russian)Mikhail Davydov
851 views63 slides
JavaScript. Event Model (in russian) by
JavaScript. Event Model (in russian)JavaScript. Event Model (in russian)
JavaScript. Event Model (in russian)Mikhail Davydov
789 views77 slides
Code Style (in russian) by
Code Style (in russian)Code Style (in russian)
Code Style (in russian)Mikhail Davydov
561 views82 slides
Ajax and Transports (in russian) by
Ajax and Transports (in russian)Ajax and Transports (in russian)
Ajax and Transports (in russian)Mikhail Davydov
570 views31 slides
Introduction in Node.js (in russian) by
Introduction in Node.js (in russian)Introduction in Node.js (in russian)
Introduction in Node.js (in russian)Mikhail Davydov
1.5K views56 slides
JavaScript. Loops and functions (in russian) by
JavaScript. Loops and functions (in russian)JavaScript. Loops and functions (in russian)
JavaScript. Loops and functions (in russian)Mikhail Davydov
680 views59 slides

More from Mikhail Davydov(15)

JavaScript. Event Model (in russian) by Mikhail Davydov
JavaScript. Event Model (in russian)JavaScript. Event Model (in russian)
JavaScript. Event Model (in russian)
Mikhail Davydov789 views
Ajax and Transports (in russian) by Mikhail Davydov
Ajax and Transports (in russian)Ajax and Transports (in russian)
Ajax and Transports (in russian)
Mikhail Davydov570 views
Introduction in Node.js (in russian) by Mikhail Davydov
Introduction in Node.js (in russian)Introduction in Node.js (in russian)
Introduction in Node.js (in russian)
Mikhail Davydov1.5K views
JavaScript. Loops and functions (in russian) by Mikhail Davydov
JavaScript. Loops and functions (in russian)JavaScript. Loops and functions (in russian)
JavaScript. Loops and functions (in russian)
Mikhail Davydov680 views
JavaScript. Event Loop and Timers (in russian) by Mikhail Davydov
JavaScript. Event Loop and Timers (in russian)JavaScript. Event Loop and Timers (in russian)
JavaScript. Event Loop and Timers (in russian)
Mikhail Davydov1.5K views
Modules and assembling of JavaScript (in russian) by Mikhail Davydov
Modules and assembling of JavaScript (in russian)Modules and assembling of JavaScript (in russian)
Modules and assembling of JavaScript (in russian)
Mikhail Davydov966 views
Dump-IT Загрузка и инициализация JavaScript by Mikhail Davydov
Dump-IT Загрузка и инициализация JavaScriptDump-IT Загрузка и инициализация JavaScript
Dump-IT Загрузка и инициализация JavaScript
Mikhail Davydov730 views
Dart - светлая сторона силы? by Mikhail Davydov
Dart - светлая сторона силы?Dart - светлая сторона силы?
Dart - светлая сторона силы?
Mikhail Davydov599 views
Making Scalable JavaScript Application by Mikhail Davydov
Making Scalable JavaScript ApplicationMaking Scalable JavaScript Application
Making Scalable JavaScript Application
Mikhail Davydov1.3K views

JavaScript. Introduction (in russian)