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 - не массив, а объект
}
}