JavaScript Overview

JS

Javascript

Высокоуровневый, динамически типизированный, интерпритируемый язык программирования. Он был стандартизован как ECMAScript в спецификации. Вместе с HTML и CSS образуют три базовые технологии World Wide Web

Что такое JavaScript

  • JavaScript это скриптовый язык (язык сценариев)
  • Язык сценариев — это легковесный язык программирования.
  • JavaScript это программный код, который может быть вставлен в HTML-страницы.
  • JavaScript вставляется в HTML-страницы и может быть выполнен всеми современными веб-браузерами, и не только.

О языке

  • Создан Brendan Eich for Netscape Navigator за десять дней!
  • Mocha ⇒ LiveScript ⇒ JavaScript ⇒ ECMAScript
  • Потерпел влияние:
    • C/Java ⇒ Синтаксис
    • Scheme ⇒ Functional Programming
    • Self ⇒ Prototype наследование
  • Был адаптирован Microsoft с именем JS для IE 3.0 ...
    • Первые войны браузеров!
  • Стандартизован ECMA International.

ПочемуJavaScript?

  • Название предполагает, что он должен быть похож на Java, но он совсем другой
  • Язык был создан слишком быстро, и есть ошибки, которые многие программисты не пытаются избежать
  • Cуществует мысль, что серьезное программирование выполняется на сервере и многие программисты не стали изучать JavaScript серьезно
  • Он поддерживает несколько парадигм: императивную и функциональную
  • Язык очень гибкий и выразительный
  • Значительные улучшения в производительности
  • Язык улучшается с последними версиями
  • Много книг, инструментов, библиотек и т.д. связанные с JavaScript

JavaScript это недопонятый язык

Но в JavaScript есть много хороших идей

Что может делать JAVASCRIPT?

  • Реагировать на действия пользователей (click, hover и т.д.)
  • Изменять HTML и CSS свойства элементов на странице
  • Сложные анимации
  • Динамически получить новые данные с сервера без перезагрузки всей страницы (AJAX)
  • ...

Basics

  • JavaScript регистрозависимый
  • Пробелы не играют значения
  • Выражения могут заканчиваться знаком ";"
  • Нет строгой типизации

комментарии

Блочные

code goes here  /*  comment goes here,  
                    and here
                */ 

Однострочный

code goes here //comment goes here 
/*
    My first program:
    Hello World!
*/
var a = "Hello World!"; //Declare new variable with initial value
alert(a); //Show message window with the content of the "a" variable

Пример

Объявление переменных

  • Переменные содержат значения и чтобы указать значение нужно использовать знак равенства
  • Переменные создаются с помощью команды «уаг» с или без начального состояния значение
  • Нет необходимости указывать тип

Без начального значения

var a;
var oneMore;
var anotherVar;
var awesomeVariable;

С начальным значением

var b = 10;
var name = "Leonardo";
var price = 10.4;

Присвоение значения

  • Чтобы установить новое значение переменной нужно использовать знак равенства "="

  • Новые данные перезаписывают предыдущие

  • Нет строгого типа данных. Это означает, что вы можете установить любое значение любого типа в переменной

//Declaration of a new variable with initial value below
var greeting = "Say hello to the new world of programming!" 

var a;
a = 10; //You can set the value after the variable declaration

var name = "Raphael";
name = "Donatello"; //It will overwrite the content of the "name" variable

var age = 10;
age = "Teenager"; //No type checking

Арифметика

Operator Description Example
+ Сложение var x = 10 + 2;
- Вычетание var x = 5 - 3;
* Умножение var x  = 2 * 2;
/ Деление var x = 20 / 5;
% Деление с остатком var x = 10 % 4;
++ Increment x++;
-- Decrement x--;
var a = 10; 
a++; 
var b = a * 2;
b = b - 1;
b--;
var c = b / 2;
c = c - a;
var x = b & 8;
//a == 10;
//a == 11;
//b == 22; a == 11;
//b == 21;
//b == 20;
//c == 10;
//c == -1;
//x = 4;

inner script code

<!DOCTYPE html>
<html>

  <head>
    <title>My first page</title>
  </head>
  
  <body>
    <h1>Example</h1>

    <script language="javascript" type="text/javascript">
        var a = "Hello World!";
        alert(a); 
    </script>
  </body>

</html>

Встраивание JAVASCRIPT в HTML

Внешний скрипт

index.html

<!DOCTYPE html>
<html>

  <head>
    <title>My first page</title>
  </head>
  
  <body>
    <h1>Example</h1>

    <script language="javascript" type="text/javascript" src="script.js">
    </script>
  </body>

</html>
var a = "Hello World!";
alert(a); 

script.js

Встраивание JAVASCRIPT в HTML

Встраивание JAVASCRIPT в HTML

Inline script code

<!DOCTYPE html>
<html>

  <head>
    <title>My first page</title>
  </head>
  
  <body>
    <h1>Example</h1>
    <p onclick="alert('Hello World!')">Say hello</p>
  </body>

</html>

Ввод / Вывод

JavaScript может "отобразить" данные несколькими способами:

  • Запись в alert окно, используя window.alert().
  • Запись в HTML используя document.write().
  • Запись в консоль браузера, используя console.log().
  • ...

Чтобы получить данные от пользователя самый простой способ это window.prompt()

Строки

  • Строки в JavaScript используются для хранения и обработки текста
  • Строка в JavaScript просто хранит ряд символов, таких как "John Doe"
  • Строка может быть в любых кавычках. Вы можете использовать одинарные или двойные кавычки
  • Чтобы экранировать символ надо использовать обратный слэш \

Typeof

Оператор typeof позволяет определить тип переменной

var a = "John";
typeof a // "string"
// Or
typeof(a) // "string"

Syntax

Логический тип

в JavaScript логический тип может быть: true or false.

ЛОГИЧЕСКОЕ сравнение

Operator Description
== равно значение
=== равно значение и тип
!= Не равно
!== Не равно значение и тип
> Больше
< Меньше
>= Больше или равно
<= Меньше или равно

BOOLEAN

if Statement

if (condition) {
    block of code to be executed if the condition is true
}

Синтаксис

Пример

var time = 8;

if (time < 10) {
   alert("Good morning");
}

else Statement

if (condition) {
    block of code to be executed if the condition is true
} else { 
    block of code to be executed if the condition is false
}

Синтаксис

Пример

var time = 22;

if (time < 10) {
   alert("Good morning");
} else {
   alert("Good evening");
}

else if Statement

if (condition1) {
    block of code to be executed if condition1 is true
} else if (condition2) {
    block of code to be executed if the condition1 is false and condition2 is true
} else {
    block of code to be executed if the condition1 is false and condition2 is false
}

Синтаксис

Пример

var time = 12;

if (time < 10) {
    alert("Good morning");
} else if (time < 18) {
    alert("Good day");
} else {
    alert("Good evening");
}

Switch Statement

switch (expression) {
    case n:
        code block
        break;
    case n:
        code block
        break;
    default:
        some default code block
}

Синтаксис

Пример

var time = 10;

switch (time) {
    case 10:
        console.log("Good morning");
        break;
    case 18:
        console.log("Good day");
        break;
    default:
        console.log("Good evening");
}

CONDITIONAL STATEMENTS

Цикл While

while (condition) {
    code block to be executed
}

Синтаксис

Пример

var age = 12;

while(age < 80){
    age = age + 1;
}

Цикл с предусловием

Цикл Do While

do {
    code block to be executed
} while (condition);

Синтаксис

Пример

var age = 12;

do {
  age = age + 1;
} while(age < 80);

Цикл с постусловием

Цикл For

for (statement 1; statement 2; statement 3) {
    code block to be executed
}

Statement 1 is executed before the loop (the code block) starts.
Statement 2 defines the condition for running the loop (the code block).
Statement 3 is executed each time after the loop (the code block) has been executed.

Синтаксис

Пример

var age = 12;

for (var i = 0; i < 5; i++) {
    age += 2;
}

Цикл со счетчиком

Loops

Массивы

var cars = ["Lada", "Audi", "BMW"];
var anotherCars = new Array("Volvo", "Nissan");

Создать с начальными значениями

var arrayName = [item1, item2, ...];   

Синтаксис

Создать пустой массив

var someArray = [];
var someAnotherArray = new Array();

МАССИВЫ

Доступ у элементам

var cars = ["Lada", "Audi", "BMW"];

//You refer to an array element by referring to the index number.
var name = cars[0]; //Lada

Добавление элементов

var cars = ["Lada", "Audi", "BMW"];
cars.push("Volvo")
//Or
cars[3] = "Volvo";

Изменение элементов массива

var cars = ["Lada", "Audi", "BMW"];
cars[1] = "Nissan";

Итерирование массива

var cars = ["Lada", "Audi", "BMW"];
for(var i = 0; i < cars.length; i++){
    console.log(cars[i]);
}

Array

Объекты

var obj = {
    property: value,
    property: value,
    ...
    property: value
};

Синтаксис

var person = {
    name: "John",
    lastName: "Doe",
    age: 20
}

Объект с начальными значениями

Пустой объект

var obj = {}
var person = {
    name: "John",
    lastName: "Doe",
    age: 20
};

var who = person.name; // or var who = person["name"];
person.age = 30; // Change value
person.hasChildren = true; // Add value

Доступ к значениям объекта

Object

Особые значения

undefined

Свойство “undefined" указывает, что переменной не было присвоено значение.

var a;
console.log(a); // undefined

null

В JavaScript null значит "ничего". Подразумевается что этого не существует

var a = null;
console.log(a); // null

NaN

var a = "John" * 50;
console.log(a); // NaN

Свойство NaN подразумевается как "Не Число". Такое значение означает что значение это не корректное число

Infinity

  • Infinity числовое значение, которое представляет положительную бесконечность.
  • -Infinity Это числовое значение, которое представляет отрицательную бесконечность.

SPECIAL VALUES

Функции

function name(parameter1, parameter2, parameter3, ...) {
    code to be executed
}

Синтаксис

Без аргументов

function myFync() {
    alert("Inside function");
}

С аргументами

function myFync(a, b, c) {
    alert(a * b * c);
}

С аргументами

function myFync(a, b) {
    return a * b;
}

Вызов

name(parameter1, parameter2, parameter3, ...)

Function

Полезные ссылки

Javascript DAta structure

Методы и свойства

Каждое значение в JavaScript имеет список методов и свойств, кроме null и underfined. Они доступны через "."

Числа

Строки

Объекты как коллекция

Итерирование объектов

Ссылки на объект

Массивы

Методы массива

Дата и Время

Полезные ссылки

https://learn.javascript.ru/data-structures Структуры данных

JavaScript Closure, Scope

Scope

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

Local Variables

Global Variables

Automatically Global

Замыкания

  • Переменные JavaScript могут принадлежать к локальной или глобальной области видимости
  • Private переменные могут быть сделаны с помощью замыканий
  • Замыкание создается, когда внутренняя функция становится доступной извне функции, которая ее создала

ВЛОЖЕННЫЕ функции

  • Все функции имеют доступ к глобальной области.
  • JavaScript поддерживает вложенные функции. 
  • На самом деле, в JavaScript, все функции имеют доступ к scope "выше" их.

Возврат функции

Самовызывающиеся функции 

Модули с помощью замыканий

Рекурсия

Валидация

Полезные ссылки

https://learn.javascript.ru/functions-closures Замыкания, область видимости

John Resig - Secrets of the JavaScript Ninja - Книга

http://gabdrahimov.ru/javascript-oglavlenie JS Учебник

http://habrahabr.ru/post/38642/  Замыкания в JavaScript

https://developer.mozilla.org/ru/docs/Web/JavaScript/Closures  Замыкания

 

JS Context

Методы объектов

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

new

Изменение контекста функции

Полезные ссылки

https://learn.javascript.ru/objects-more Методы объектов и контекст вызова

https://learn.javascript.ru/js-misc Некоторые другие возможности

JavaScript ООП

Javascript отличается от других OOP языков

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

Функции в Javascript

В JavaЫcript функции могут представлять собой конструкторы. Вы вызываете функцию как конструктор с помощью оператора new.

Javascript Prototype

Инкапсуляция

Наследование

В JavaScript, у нас нет понятия класса, так наследование в JavaScript основано прототипах. Это объект наследует от другого объекта.

Полиморфизм

Полезные ссылки

https://learn.javascript.ru/oop ООП в функциональном стиле

https://learn.javascript.ru/prototypes ООП в прототипном стиле

http://habrahabr.ru/post/144646 Понимание ООП в JavaScript

http://habrahabr.ru/post/144646 Javascript: ООП, прототипы, замыкания, «класс» Timer.js

http://tobyho.com/2010/11/22/javascript-constructors-and Javascript Constructors and Prototypes

https://raw.githubusercontent.com/coodict/javascript-in-one-pic/master/js%20in%20one%20pic.png All JavaScript ( taken from GitHub)

Javascript DOM, Bom

 Document Object Model

С HTML DOM, JavaScript может получить доступ и изменять все элементы в HTML документе.

С помощью DOM JavaScript получает всю власть, необходимую для создания динамических HTML:

  • JavaScript может изменить все HTML элементы на странице
  • JavaScript может изменить все атрибуты HTML-страницы в
  • JavaScript может изменить все стили CSS на странице
  • JavaScript может удалить существующий HTML элементы и атрибуты
  • JavaScript не может добавлять новые элементы HTML и атрибуты
  • JavaScript может реагировать на все существующие HTML событий на странице
  • JavaScript может создавать новые HTML событий на странице

DOM Programming Interface

  • DOM может быть доступен из JavaScript (или из другого языка программирования)
  • В DOM, все HTML элементы определены как объекты.
  • Интерфейс взаимодействия это свойства и методы каждого объекта.
  • Свойство это значение, вы можете получить или изменить (например, изменение содержания в HTML элемента).
  • Методы является действием  (например добавить или удалить элемент HTML).

Поиск элементов

Method Description
document.getElementById( id) Найти элемент по id
document.getElementsByTagName( name) Найти элементы по названию тега
document.getElementsByClassName( name) Найти элементы по названию класса
document.querySelector(selectors); Возвращает элемент в соответствии с CSS селектором
document.querySelectorAll(selectors); Возвращает список элеменов в соответствии с CSS селектором

Изменение HTML Элементов

Method Description
element.innerHTML =   new html content Изменить внутренний HTML элемента
element.setAttribute (attribute, value) Изменить аттрибут
element.style. property = new style Изменить стиль

Добавление и удаление Elements

Method Description
document.createElement( element) Создать HTML элемент
document.removeChild( element) Удалить HTML элемент
document.appendChild( element) Добавить HTML элемент
document.replaceChild( newChild, oldChild) Заменить HTML элемент
document.write( text) Запись в выходной поток HTML 

Добавление слушателей событий

Method Description
document.getElementById( id).onclick = function(){ code} Присвоить одного слушателя
document.getElementById( id).addEventListener('click', handler) Добавить слушателя
document.getElementById( id).removeEventListener('click', handler) Удалить слушателя по ссылке

JavaScript Window

Browser Object Model (BOM) позволяет JavaScript "общаться" с браузером.

  • Объект window поддерживается всеми браузерами. Он представляет собой окно браузера.
  • Все глобальные объекты JavaScript, функции и переменные, автоматически становятся членами объекта window.
  • Глобальные переменные являются свойствами объекта window.
  • Глобальные функции методы объекта window.
  • Даже объект документа (в HTML DOM) является свойством объекта о window    

Полезные ссылки

https://learn.javascript.ru/document Документ и объекты страницы

Javascript Events

HTML Events

HTML-событие может от браузера или от пользователя.

Вот некоторые примеры HTML событий:

  • HTML страница загрузилась
  • Поле ввода было изменено
  • Кнопка была нажата

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

Одни из событий

Event Description
onchange HTML-элемент был изменен
onclick Пользователь нажимает на элемент HTML
onmouseover Пользователь перемещает курсор над HTML элементом
onmouseout Пользователь перемещает курсор от HTML элемента
onkeydown Пользователь нажимает клавишу клавиатуры
onload Браузер закончил загрузку страницы

Sandbox

Forms

Полезные ссылки

https://learn.javascript.ru/event-details События в деталях

https://learn.javascript.ru/forms-controls Формы, элементы управления

Тренировочное задание

Создать простой ToDo список

При нажатии на кнопку Добавить появляется окно подтверждения с именем создаваемого пункта .
* Дополнительная задача: добавить возможность удалять созданные элементы 

THANKS FOR YOUR ATTENTION

Javascript Overview

JavaScript Overview

By Dima Pikulin

JavaScript Overview

  • 1,223