Приведение типов, неявное и явное. Взаимодействие типов с операторами.

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

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

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

3. Преобразование к логическому значению.

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

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

При приведении объекта к строке неявным образом вызывается метод toString, который так же можно вызвать явно.

Можно также осуществить преобразование явным вызовом String(val):

String(null) === "null"; // true

Также для явного преобразования применяется оператор "+", у которого один из аргументов строка. При «сложении» числа со строкой, число преобразуется к строке и происходит его конкатенация (склеивание) со вторым операндом. Например:

123 + "test"; // "123test"

"123" + undefined; // "123undefined"

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

Численное преобразование происходит в математических функциях и выражениях, а также при сравнении данных различных типов (кроме сравнений ===, !==). Операции инкремента или декремента над строкой приведут её к числу. Если значение, содержащиеся в строке не может быть расценено как число, то результатом выполнения инкремента или декремента над такой строкой будет специальное значение NaN типа number. Для явного преобразования можно использовать функции parseInt - для преобразования строки в целое число и parseFloat -для преобразования в дробное. Побитовые операторы приводят число к 32-разрядному целому.

Для преобразования к числу в явном виде можно вызвать Number(val), либо, что короче, поставить перед выражением унарный плюс "+":

let a = +"123"; // 123

let a = Number("123"); // 123

Значение Преобразуется в
undefined NaN
null
true/false 1 / 0
Строка Пробельные символы по краям обрезаются. Далее, если остаётся пустая строка, то 0, иначе из непустой строки "считывается" число, при ошибке результат NaN.

Специальные значения

Интуитивно, значенияnull/undefinedассоциируются с нулём, но при преобразованиях ведут себя иначе.Специальные значения преобразуются к числу так:

Значение Преобразуется в
undefined NaN
null

Это преобразование осуществляется при арифметических операциях и сравнениях >, >=, <, <=, но не при проверке равенства ==. В нём считается, что null и undefined равны "==" между собой, но эти значения не равны никакому другому значению. Это ведёт к забавным последствиям.

alert( null >= 0 ); // true, т.к. null преобразуется к 0

alert( null > 0 ); // false, т.к. null преобразуется к 0

alert( null == 0 ); // false, т.к. == рассматривает null особо.

alert( undefined > 0 ); // false, т.к. undefined -> NaN

alert( undefined == 0 ); // false, т.к. это undefined (без преобразования)

alert( undefined < 0 ); // false, т.к. undefined -> NaN

Логическое преобразование

Преобразование к true/false происходит в логическом контексте, таком как if(value), и при применении логических операторов.

Все значения, которые интуитивно «пусты», становятся false. Их несколько: 0, пустая строка, null, undefined и NaN. Остальное, в том числе и любые объекты – true.

Полная таблица преобразований:

Значение Преобразуется в
undefined, null false
Числа Все true, кроме 0, NaN - false.
Строки Все true, кроме пустой строки "" - false
Объекты Всегда true

Для явного преобразования используется двойное логическое отрицание!!valueили вызовBoolean(value).

Встроенные модальные окна.

alert

Синтаксис:

alert(сообщение);

alert выводит на экран окно с сообщением и приостанавливает выполнение скрипта, пока пользователь не нажмёт «ОК». Окно сообщения, которое выводится, является модальным окном. Слово «модальное» означает, что посетитель не может взаимодействовать со страницей, нажимать другие кнопки и т.п., пока не разберётся с окном. В данном случае – пока не нажмёт на «OK».

prompt

Функция prompt принимает два аргумента:

result = prompt(title, default);

Она выводит модальное окно с заголовком title, полем для ввода текста, заполненным строкой по умолчанию default и кнопками OK/CANCEL. Пользователь должен либо что-то ввести и нажать OK, либо отменить ввод кликом на CANCEL или нажатием Esc на клавиатуре. Вызов prompt возвращает то, что ввёл посетитель – строку или специальное значение null, если ввод отменён.

confirm

Синтаксис:

result = confirm(question);

confirm выводит окно с вопросом question с двумя кнопками: OK и CANCEL. Результатом будет true при нажатии OK и false – при CANCEL(Esc).

Наши рекомендации