JavaScript. Справочник
1
Содержание
Переменные
Объявление переменных
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 - не массив, а объект } }