Операторы сравнения
и логические значения

  • Больше/меньше: a > b, a < b.
  • Больше/меньше или равно: a >= b, a <= b.
  • Равно a == b. Для сравнения используется два символа равенства '='. Один символ a = b означал бы присваивание.
  • «Не равно». В математике он пишется как ≠, в JavaScript — знак равенства с восклицательным знаком перед ним !=.

Сравнение строк

  • Строки сравниваются побуквенно
  • Если строка состоит из нескольких букв, то сравнение осуществляется как в телефонной книжке или в словаре. Сначала сравниваются первые буквы, потом вторые, и так далее, пока одна не будет больше другой.

 

Сравнение разных типов

При сравнении значений разных типов, используется числовое преобразование. Оно применяется к обоим значениям.

 



'2' > 1; // true, сравнивается как 2 > 1
'01' == 1; // true, сравнивается как 1 == 1
false == 0; // true, false становится числом 0
true == 1; // true, так как true становится числом 1.

Строгое равенство

Для проверки равенства без преобразования типов используются операторы строгого равенства

=== (тройное равно) и !==.


0 === false; // false, т.к. типы различны

Сравнение с null
и undefined

  1. Значения null и undefined равны == друг другу и не равны чему бы то ни было ещё. Это жёсткое правило буквально прописано в спецификации языка.
  2. При преобразовании в число null становится 0, а undefined становится NaN.

null > 0; // false       undefined > 0; // false
null == 0; // false      undefined < 0; // false
null >= 0; // true      undefined == 0; // false

Условные операторы: if, '?'

Оператор if (...) вычисляет и преобразует выражение в скобках к логическому типу.

В логическом контексте:
Число 0, пустая строка "", null и undefined, а также NaN являются false,
Остальные значения — true.


Неверное условие, else

Необязательный блок else («иначе») выполняется, если условие неверно

Несколько условий, else if

Бывает нужно проверить несколько вариантов условия. Для этого используется блок 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

Конструкция switch заменяет собой сразу несколько if.

switch (a) {
  case 2:
  case 3:
    doSomething();
    break;
  case 4:
    doSomethingElse();
    break;
  default:
    alert('Я таких значений не знаю');
    break;
}

Циклы while, for


var i = 0;
while (i < 3) {
  alert( i );
  i++;
}

var i = 0;
do {
  alert( i );
  i++;
} while (i < 3);

Цикл for



var i;

for (i = 0; i < 3; i++) {
  alert( i );
}

Прерывание цикла: break


var sum = 0;
var value = 0;
while (true) {
  if (!value) break;

  sum += value;
}

Следующая итерация: continue


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
  • В JavaScript функция является значением, таким же как строка или число.
  • Функцию можно скопировать в другую переменную.
  • Обычные значения, такие как числа или строки, представляют собой данные. А функцию можно воспринимать как действие.

Function Declaration
Function Expression



// 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("Вы отменили выполнение.");
    }
);

Преобразование типов
для примитивов

Всего есть три преобразования:

  1. Cтроковое преобразование.
  2. Числовое преобразование.
  3. Преобразование к логическому значению.

Строковое преобразование

Строковое преобразование происходит, когда требуется представление чего-либо в виде строки.


В случае сложения, если один из аргументов строка, второй аргумент преобразовывается в строку.

 

Численное преобразование


Значение


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'
  • substring(start [, end]) - возвращает подстроку с позиции start до, но не включая end. (slice)
  • substr(start [, length]) - аналогично, только второй параметр не коне, а количество символов.

Числа. Способы записи



alert(0xFF); // 255 в шестнадцатиричной системе
alert(010); // 8 в восьмеричной системе

// еще пример научной формы: 3 с 5 нулями
alert(3e5); // 300000

// здесь 3 сдвинуто 5 раз вправо, за десятичную точку.
alert(3e-5); /* 0.00003  <-- 5 нулей,
                включая начальный ноль */

Infinity



alert(12345 / 0); // Infinity
alert(Infinity > 1234567890); // true
alert(Infinity + 5 == Infinity); // true
alert(-1 / 0); // -Infinity

NaN


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

  • Значение NaN «прилипчиво». Любая операция с NaN возвращает NaN.
  •  Математические операции в JS безопасны.

Преобразование к числу


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
  • Пробельные символы в начале и в конце строки игнорируются.
  • Преобразование к числу происходит в любых математических операциях и функциях

parseInt и parseFloat


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 преобразуют строку символ за символом, пока это возможно.​

Module 1. Lesson 2

By Anton Shyrokoborodov

Module 1. Lesson 2

  • 1,432