Версии JavaSript и совместимость с браузерами

Правильное название языка JavaScript - ECMAScript в соответствии со стандартом ECMA. Текущая версия языка, поддерживаемая всеми основными браузерами ECMAScript 2015 или ES6. При работе с различными JS библиотеками и фреймворками, такими как ReactJS и Angular, используют специальные пакеты инструментов (Babel, Webpack) для преобразования кода, написанного в новых версиях JavaScript ES6 в более "безопасные" версии (ES5 и т.д.). Так обеспечивается полная совместимость кода для всех устройств и браузеров.

Основы основ

Код выполняется внутри html-документа в теге

<script>[код]</script>

Можно подключить отдельный javascript файл, часто его добавляют либо внутри тега <head>, либо внизу страницы перед закрывающим тэгом </body>.

<script src="/js/script.js"></script>

Для комментирования используется два вида комментариев, однострочный и многострочный:

// это однострочный комментарий

/* первая строка многострочного комментария

вторая строка многострочного комментария */

Строгий режим "use strict" включается в начале js-кода документа и используется для включения изменений версии ES5, рекомендуется для использования.

Для задания переменной используется ключевое слово let, устаревший вариант var.

let a = "text";

var x;

Для создания константы используется const. Константу нельзя изменять, но если массив задан как константа, то его члены можно изменять.

const pi = 3.14;

Типы данных в JavaScript

JavaScript поддерживает динамическую типизацию, т.е. переменные могут содержать в разные моменты времени данные разных типов.

Числовой тип данных (number).

Строки, заключаются в кавычки. Обратные кавычки позволяют встраивать выражения в строку, например:

let name = "World";

alert(`Hello, ${name}!`); // Hello, World! 

Логический тип (boolean) переменных, принимающих только значения true и false.

Отдельный тип null.

Отдельный тип undefined.

Тип объект (object).

Тип символ (symbol).

Оператор typeof возвращает тип переменной.

typeof true //boolean

Функции преобразования типов

String(value)

Number(value)

Boolean(value)

Операторы

+ сложение, сложение строк, унарный + (приводит к числовому типу),

- вычитание,  

* умножение,

/ деление,

= присваивание (возвращает значение),

% остаток от деления,

** возведение в степень,

++/-- инкремент/декремент, постфикс и префикс формы,

побитовые операторы

совмещенные +=, -=, *=, /=

оператор запятая ,

сравнение >,<,>=,<=,==,=== (строгое равенство),!=,!== 

логические операторы || или, && и, ! не.

Модальные окна

alert(message)

prompt(title,[default])

confirm(question) 

Условные операторы

if (условие) {действия} elseif (еще условие){действия} else {действие}

тернарный let res = условие ? значение 1 : значение 2;

Конструкция switch

switch(x) {

case 'value1': 

...

[break]

case 'value2':

....

[break]

default:

...

[break]

Циклы 

while (условие) {действия}

do {действия} while (условие)

for ( let i = 0; i < 4; i++) {действия}

break прерывание цикла

continue переход к следующей итерации

Функции

function имя(параметры){

тело

return x

}

вызов функции

имя([параметры, пар1 = значение параметра по умолчанию])

Другой способ задания функции - функциональное выражение (functional expression).

let doSomething = function() {тело}

Если вызвать функцию по имени без скобок, то выведет код функции.

стрелочные функции let func = (arg1, arg2....) => expression

Объекты JavaScript

Создание пустого объекта 

let user = new Object(); или let user = {};

Создание объекта с заполнением значениями

let user = { key1: value1, key2: value2 }

К значению обращаемся через точку

alert(user.key1) 

или также как к членам массива alert(user["key1"]) 

Можно добавить свойство

user.key3 = true

Можно удалить свойство 

delete user.key1;

Используйте квадратные скобки для создания вычисляемого свойства объекта

let fieldName = prompt("Input name", "name");

let contact = {[fieldName]:"Alex"} 

console.log(contact.name); // Alex

Если имя свойства совпадает с именем переменной, то имя свойства можно опустить 

{ firstName, surName }

Два способа проверки существования свойства: 

Обращение в несуществующему свойству возвращает undefined

"key" in object // оператор in возвращает true или false

Цикл for... in

for (let key in object) ...

Метод Object.asign

Объекты присваиваются и копируются по ссылке, т.е. две переменных могут содержать ссылку на один объект. Чтобы создать клон объекта, нужно создать новый объект и копировать в него все свойства старого объекта (напр. в цикле for..in).

Object.assign(dest, [src1, src2...]) // Копирует свойства src.. в dest и возвращает dest.

Можно использовать для клонирования

let clonedObject = Object.assign({}, originalObject);