При сравнении значений разных типов, используется числовое преобразование. Оно применяется к обоим значениям.
'2' > 1; // true, сравнивается как 2 > 1
'01' == 1; // true, сравнивается как 1 == 1
false == 0; // true, false становится числом 0
true == 1; // true, так как true становится числом 1.
Для проверки равенства без преобразования типов используются операторы строгого равенства
=== (тройное равно) и !==.
0 === false; // false, т.к. типы различны
null > 0; // false undefined > 0; // false
null == 0; // false undefined < 0; // false
null >= 0; // true undefined == 0; // false
Оператор if (...) вычисляет и преобразует выражение в скобках к логическому типу.
В логическом контексте:
Число 0, пустая строка "", null и undefined, а также NaN являются false,
Остальные значения — true.
Неверное условие, else
Необязательный блок else («иначе») выполняется, если условие неверно
Бывает нужно проверить несколько вариантов условия. Для этого используется блок else if.
JavaScript сначала проверит первое условие, если оно ложно — перейдет ко второму — и так далее, до последнего else.
var year = 2015;
if (year < 2015) {
alert('Это слишком рано...');
} else if (year > 2015) {
alert('Это поздновато...');
} else {
alert('OK!');
}
Вопросительный знак — единственный оператор, у которого есть аж три аргумента, в то время как у обычных операторов их один-два. Поэтому его называют «тернарный оператор».
Последовательность операторов '?' позволяет вернуть значение в зависимости не от одного условия, а от нескольких.
var count = 2;
var text = count == 1 ? 'Apple' : 'Apples';
Для операций над логическими значениями в JavaScript есть: || (ИЛИ),
&& (И) и ! (НЕ).
|| (ИЛИ)
Оператор ИЛИ вычисляет ровно столько значений, сколько необходимо — до первого true.
&& (И)
При этом оператор ИЛИ возвращает то значение, на котором остановились вычисления. Причём, не преобразованное к логическому типу.
И возвращает true, если оба аргумента истинны, а иначе — false
! (НЕ)
Сначала приводит аргумент к логическому типу true/false.
Затем возвращает противоположное значение.
Конструкция switch заменяет собой сразу несколько if.
switch (a) {
case 2:
case 3:
doSomething();
break;
case 4:
doSomethingElse();
break;
default:
alert('Я таких значений не знаю');
break;
}
var i = 0;
while (i < 3) {
alert( i );
i++;
}
var i = 0;
do {
alert( i );
i++;
} while (i < 3);
var i;
for (i = 0; i < 3; i++) {
alert( i );
}
var sum = 0;
var value = 0;
while (true) {
if (!value) break;
sum += value;
}
for (var i = 0; i < 10; i++) {
if (i % 2 == 0) continue;
alert(i);
}
function showMessage() {
alert('Hello World!');
}
showMessage();
function showMessage() {
var message = 'Hello World!'; // локальная переменная
alert(message);
}
showMessage(); // 'Hello World!'
alert(message); // будет ошибка, т.к. переменная видна только внутри
var userName = 'World';
function showMessage() {
var message = 'Hello ' + userName + '!';
alert(message);
}
showMessage(); // 'Hello World!'
Параметры копируются в локальные переменные функции.
function showMessage(message, name) {
// параметры message, name
alert(message + ' ' + name + '!');
}
showMessage('Hello', 'World');
function showMessage(message, name) {
// параметры message, name
if (name === undefined) {
name = 'World';
}
// name = name || 'World';
alert(message + ' ' + name + '!');
}
showMessage('Hello', );
function multiple(a, b) {
return a * b;
}
var test = multiple(2, 2);
alert(test); // 4
// Function Declaration
function sum(a, b) {
return a + b;
}
// Function Expression
var sum = function(a, b) {
return a + b;
}
if (age >= 18) {
function sayHi() {
alert('OK!');
}
} else {
function sayHi() {
alert('До 18 нельзя');
}
}
sayHi();
function sayHi() {
alert('OK');
}
function sayHi() {
alert('До 18 нельзя');
}
var age = 20;
if (age >= 18) {
/* объявление было обработано ранее */
} else {
/* объявление было обработано ранее */
}
sayHi(); // "До 18 нельзя", сработает всегда вторая функция
function ask(question, yes, no) {
if (confirm(question)) {
yes();
} else {
no();
}
}
function showOk() {
alert("Вы согласились.");
}
function showCancel() {
alert("Вы отменили выполнение.");
}
ask("Вы согласны?", showOk, showCancel);
function ask(question, yes, no) {
if (confirm(question)) {
yes();
} else {
no();
}
}
ask(
"Вы согласны?",
function() {
alert("Вы согласились.");
},
function() {
alert("Вы отменили выполнение.");
}
);
Всего есть три преобразования:
Строковое преобразование происходит, когда требуется представление чего-либо в виде строки.
В случае сложения, если один из аргументов строка, второй аргумент преобразовывается в строку.
Значение
undefined
null
true / false
Строка
Преобразуется в…
NaN
0
1 / 0
Пробельные символы по краям обрезаются. Далее, если остаётся пустая строка, то 0, иначе из непустой строки «считывается» число, при ошибке результат NaN.
Значение
undefined, null
Числа
Строки
Объекты
Преобразуется в…
false
Все true, кроме 0, NaN — false.
Все true, кроме пустой строки "" — false
Всегда true
Все значения в JavaScript, за исключением null и undefined, содержат набор вспомогательных функций и значений, доступных «через точку».
Такие функции называют «методами», а значения — «свойствами». Здесь мы рассмотрим основы использования свойств и методов.
// Строки
var str = 'Hello world!';
alert(str.length); // 12
alert(str.toUpperCase()); // "HELLO WORLD!"
// Числа
var n = 12.345;
alert(n.toFixed(2)); // "12.35"
alert(n.toFixed(0)); // "12"
alert(n.toFixed(5)); // "12.34500"
alert(12.toFixed(1)); // ошибка!
alert(12..toFixed(1)); // 12.0
// Спец. символ - перенос на новую строку
alert('Привет\nМир'); /* выведет "Мир"
на новой строке */
// Экранирование специальных символов
var str = 'I\'m a JavaScript programmer';
var str = "I'm a JavaScript \"programmer\" ";
var str = ' символ \\ '; // символ \
// Длина и доступ к символам
var str = "jQuery";
alert(str.length); // 6
alert(str.charAt(0)); // "j"
alert(str[0]); // "j"
// Смена регистра
alert('Javascript'.toUpperCase()); // JAVASCRIPT
alert('USSR'.toLowerCase()); // ussr
// Поиск подстроки
alert(str.indexOf("j") ); // 0
alert(str.indexOf("Query") ); // 1
alert(str.indexOf("query") ); // -1
var string = 'check it out';
alert(string.substring(1)); // 'heck it out'
alert(string.substring(0, 3)); // 'che'
alert(string.substr(1)); // 'heck it out'
alert(string.substr(0, 3)); // 'che'
substr(start [, length]) - аналогично, только второй параметр не коне, а количество символов.
alert(0xFF); // 255 в шестнадцатиричной системе
alert(010); // 8 в восьмеричной системе
// еще пример научной формы: 3 с 5 нулями
alert(3e5); // 300000
// здесь 3 сдвинуто 5 раз вправо, за десятичную точку.
alert(3e-5); /* 0.00003 <-- 5 нулей,
включая начальный ноль */
alert(12345 / 0); // Infinity
alert(Infinity > 1234567890); // true
alert(Infinity + 5 == Infinity); // true
alert(-1 / 0); // -Infinity
alert(0 / 0); // NaN
alert(NaN == NaN); // false
alert(NaN === NaN); // false
var n = 0 / 0;
alert(isNaN(n)); // true
// Забавный способ проверки на NaN
alert(n !== n) // true
Text
alert(+"12"); // 12
alert(+"12test"); // NaN
alert(+" -12"); // -12
alert(+" \n34 \n"); /* 34, перевод строки \n
является пробельным символом */
alert(+""); // 0, пустая строка становится нулем
alert(+"1 2"); // NaN, пробел посередине числа - ошибка
alert("12.34" / "-2"); // -6.17
alert(parseInt('12px')); // 12
alert(parseFloat('12.3.4')) /* 12.3, ошибка
на второй точке */
alert(parseInt('a123')); // NaN
Функция parseInt и ее аналог parseFloat преобразуют строку символ за символом, пока это возможно.
alert(Math.floor(3.1)); // 3
alert(Math.ceil(3.1)); // 4
alert(Math.round(3.1)); // 3
alert(Math.round(3.5)); // 4
Функция parseInt и ее аналог parseFloat преобразуют строку символ за символом, пока это возможно.