Содержание

 

Переменные

Объявление переменных
var a = 10;              // Объявление переменной в области видимости функции
var a = 5, A = 10;       // Переменные в JS - регистрозависимые
var $d, _a, d$5;         // Символы $ и _ тоже могут использоваться в переменных
var s = "a";             // Объявление строк
var s = 'abc';           // Одинарные или двойные кавычки

// Объявление массивов
var arr = [];                      // Объявление пустого массива
var arr = [1, [2, '3'], "test"];   // Объявление вложенных массивов

// Объявление объектов
var obj = {};                      // Объявление пустого объекта
var user = {                       // Объявление объекта с инициализацией
  login: "user",
  name: "User Name",
  age: 23,
  gender: "male"
};

Преобразование типов

Преобразование в строку
// Преобразование в строку происходит когда требуется представление выражения в виде строки
alert(true);             // "true"
var a = String(null);    // "null"
var a = "" + undefined;  // "undefined"
Преобразование в число
// Преобразование в число происходит в математических функциях и выражениях
// А также при сравнении данных различных типов (кроме сравнений ===, !==)
var a = +"123";          // 123
var a = Number("123");   // 123
var a = +true;           // true -> 1, false -> 0
var a = +" \n 123 \n ";  // 123
var a = +"abc";          // NaN

// Преобразование null и undefined в число
// Преобразования в число выполняется только для операций > >= < <=
var a = +indefined;      // NaN
var a = +null;           // 0

// Операция сравнения == для null и undefined всегда дает false
// кроме случаев когда они сравниваются друг с другом
var a = null == 0;            // false
var a = null == undefined;    // true
Преобразование в логический тип
var a = !!5;                  // true - все числа true, кроме 0 и NaN
var a = Boolean("abc");       // true - все строки true, кроме ""
var a = Boolean({});          // true - все объекты всегда true
var a = Boolean(null);        // false
var a = !!undefined;          // false

Операторы

Основные операторы
var a = b = 10           // a = 10, b = 10 - присваивание по цепочке
alert(a = 2);            // 2
var a = 2 + "2";         // '22' - Бинарный плюс. Если один из аргументов - строка, второй тоже приводится к строке
var a = "12" / 3 - "2";  // 2 - Остальные операторы работают только с числами
var a = 6 % "2";         // 0 - Остаток от деления
var a = 0, b = ++a;      // a = 1, b = 1
b += a;                  // b = b + a
Оператор запятая
var a, b;
var c = (a = 0, b = 1, b++);  // Вычисляются все выражения, возвращается последнее
Операторы сравнения >, <, >=, <=, ==, !=
var a = 3 < 4            // true
var a = 'f' > 'G'        // true - Строки сравниваются побуквенно
var a = 'При' > 'Пр'     // true - любая буква больше отсутствия буквы
Сравнение разных типов
// При сравнении разных типов используется преобразование в число
var a = '3' > 2;         // true (3 > 2)
var a = 1 == false       // false (1 == 0)
Строгое сравнение (без приведения типов)
var a = 1 === '1';       // false
var a = 1 !== '1';       // true
Логические операторы
var a = true || false;   // true - логическое "ИЛИ", если встретилось выражение true, то остальные не вычисляются
var a = null || "a";     // "a" - возвращается первое значение, которое привелось к true
var a = "" || 0;         // 0 - если все значения false, то возвращается последнее
var a = false && true;   // false - логическое "И", если встретилось выражение false, то остальные не вычисляются
var a = null && "a";     // null - возвращается первое значение, которое привелось к false
var a = "a" && 1;        // 1 - если все значения true, то возвращается последнее
var a = 0 || 2 && null;  // null - приоритет у "И" выше, чем у "ИЛИ"
Побитовые операции
// Работают только с 32-разрядными целыми числами. Дробная часть отбрасывается
var a = ~1 & 2 | 3 ^ 4;  // Побитовые NOT, AND, OR, XOR
var a = 2 << 1;          // Побитовый сдвиг влево
var a = 2 >> 1;          // Побитовый сдвиг вправо с сохранением знака
var a = 2 >>> 1;         // Побитовый сдвиг вправо с заполнением 0
var a = ~~2.5;           // 2 - дробная часть отбрасывается
var a = 5.6 ^ 0;         // 5 - дробная часть отбрасывается
var a = 1.7 + 1.5 ^ 0;   // 3 - приоритет побитовых операций ниже арифметических

Основные конструкции языка

Условные операторы
if(a < 10) { a++; } else { a--; };          // оператор if
a < 10 ? a++ : a--;                         // тернарный оператор
Циклы
while(i < 10) { i++; }                      // цикл while
do { i++; } while(i < 10);                  // цикл do - while
for(var i = 0; i < 10; i++) { alert(i); }   // цикл for
for(; i < 10;) { alert(i); }                // любая часть for может быть пропущена
for(var key in obj) alert(key);             // Перебор свойств объекта

break;                                      // Прерывание цикла
continue;                                   // Переход к следующей итерации цикла

label:
for(var i = 0; i < 10; i++)
{
  loop: for(var j = 0; j < 10; j++)
  {
    if(j > 3) break label;                  // Прерывание цикла, отмеченного меткой "label"
    else continue loop;                     // Продолжение цикла "loop"
  }
  continue label;
}
Конструкция switch
var v = 1;
switch(v)
{
  case "1":         // Не выполнится. Для сравнения используется строгое равенство
  case a - 1:       // В case могут быть любые выражения
    break;          // Выполнение происходит до директивы break
  case 1:           // Если break отсутствует, то выполнение продолжается
  case 2:           // Условия в следующих case при этом игнорируются
  default:          // Будет выполнен даже default
    break;
}

Функции

Объявление функции
hello("John");                  // Позволяет вызывать функцию до объявления

function hello(name) {
  alert("Hello, " + name);
  return true;
}
Функциональное выражение
var hello = function(name) {
  alert("Hello, " + name);
}

hello("John");                     // Функция может вызваться только после объявления

var a = 2;
var f = (a > 1)                    // Позволяет сделать условное объявление функции
  ? function() { console.log("success"); }
  : function() { console.log("error"); };
f();

var f = function fact(n) {         // Использование имени позволяет обратиться к функции
  return n ? n * fact(n - 1) : 1;  // внутри самой функции
}
alert(f(5));
Создание функции в процессе выполнения
var hello = new Function("name", "alert('Hello, ' + name);");
hello("John");
Функция с переменным числом параметров
function helloAll() {
  for(var i = 0; i < arguments.length; i++)
  {
    alert("Hello, " + arguments[i]);          // arguments - не массив, а объект
  }
}