мое новое расписание: пн-пт с 8.00 по 16.00 по москве, сб и вс - выходные; после 16.00 и на вых. отвечаю по возможности

Принудительное преобразование типов данных в JavaScript

Давайте рассмотрим следующий код:

let a = '2'; let b = '3'; alert(a + b); // выведет '23'

Как вы видите, в нашем случае обе переменных содержат в себе строки и складываются, соответственно, как строки.

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

В этом случае мы можем принудительно преобразовать тип нашей переменной к числу, используя специальную функцию Number:

let a = '2'; let b = '3'; alert(Number(a) + Number(b)); // выведет 5

Можно преобразовывать строки в числа не в операции сложения, а сразу при записи в переменную - это будет работать:

let a = Number('2'); // в переменную запишется число 2 let b = Number('3'); // в переменную запишется число 3 alert(a + b); // выведет 5

Дана переменная a со значением '10' и переменная b со значением '20'. Сложите данные переменные как числа.

Не запуская код, определите, что выведется на экран:

alert( Number('2') + Number('3') );

Не запуская код, определите, что выведется на экран:

alert( 2 + Number('3') );

Не запуская код, определите, что выведется на экран:

alert( '2' + Number('3') );

Альтернатива Number

Рассмотрим следующий код с использованием функции Number:

let a = Number('2'); // в переменную запишется число 2

На самом деле функция Number имеет альтернативу (и вы ее знаете из предыдущего урока): чтобы преобразовать строку к числу, с ней нужно выполнить недопустимую для строк, но корректную для чисел операцию.

Проблема в том, что такая операция кроме преобразования к числу, может изменить это самое число - ведь преобразование к числу на самом деле побочный эффект и сама операция что-то делает, например, умножает наше число на другое.

Однако, можно придумать операцию, не приводящую к изменению числа: например, умножать или делить его на 1:

let a = '2' * 1; // в переменную запишется число 2

Более распространенным является написание знака + перед нашей строкой. В этом случае + является просто обозначением положительного числа и, как уже упоминалось ранее, ничего не делает - но на самом деле не делает ничего математического, но тем не менее преобразует строку в число:

let a = +'2'; // в переменную запишется число 2

Очень часто прием с плюсом используется как альтернатива функции Number - для сокращения кода.

Вот пример применения:

let a = +'2'; // в переменную запишется число 2 let b = +'3'; // в переменную запишется число 3 alert(a + b); // выведет 5

Вот еще пример:

let a = '2'; let b = +a; // в b запишется число 2

А вот следующий пример, хоть и рабочий, но выглядит не очень красиво:

let a = '2'; let b = '3'; alert(+a + +b); // выведет 5

Здесь более уместно было бы использование функции Number.

Дан код:

let a = '2'; let b = '3'; alert(a + b); // выведет '23'

С помощью описанного приема с плюсом исправьте приведенный код так, чтобы в переменные a и b присваивалось число, а не строка, ну и результатом, соответственно, было не '23', а 5.

Number и нецифры

При попытке преобразовать строку, содержащую не только цифры, но и другие символы, функция Number вернет своим результатом значение NaN:

alert(Number('2s')); // выведет NaN

Выделение числа

Как видно из предыдущего раздела, функция Number работает только со строками, состоящими из цифр.

Однако, при программировании на JavaScript часто встречаются ситуации, когда вам нужно обращаться со строками, в начале которых стоит число, а затем буквы.

Примером такой строки может быть значение в пикселях: '12px'.

Пусть нам необходимо достать стоящее в начале число, отбросив строковую часть.

Для такой операции существует функция parseInt. Давайте посмотрим ее работу на примере:

let num = parseInt('12px'); alert(num); // выведет 12

Пиксели, однако, иногда бывают дробными: '12.5px'. В этом случае функция parseInt пасует и выводит только целую часть:

let num = parseInt('12.5px'); alert(num); // все равно выведет 12

В общем-то, возможно такое поведение - это именно то, что вам нужно. Но если нет - используйте функцию parseFloat, которое извлекает число вместе с его дробной частью:

let num = parseFloat('12.5px'); alert(num); // выведет 12.5

Конечно же, отсутствие дробной части не мешает функции parseFloat работать корректно:

let num = parseFloat('12px'); alert(num); // выведет 12

Дана переменная со значением 5px и переменная со значением 6px. Найдите сумму пикселей из значений этих переменных и выведите ее на экран.

Дана переменная со значением 5.5px и переменная со значением 6.25px. Найдите сумму пикселей из значений этих переменных и выведите ее на экран.

Модифицируйте предыдущую задачу так, чтобы к выводящемуся результату добавлялись буквы 'px'. То есть, если наша сумма равна 11.75, то на экран пусть выведется 11.75px.

Преобразование к строке

Иногда нужно выполнить обратное преобразование - из числа в строку. Для этого предназначена функция String:

let str = String(123); // теперь в переменной строка '123'

Еще пример:

let num1 = 1; let num2 = 2; alert(String(num1) + String(num2)); // выведет '12'

Даны две переменные с числами. Сложите значения этих переменных как строки и выведите результат на экран.

Применение преобразование к строке

Пусть у нас есть переменная num с каким-то числом:

let num = 12345;

Давайте найдем количество цифр в этом числе. Как вы уже знаете, чтобы найти длину строки, можно использовать свойство length.

Оно, однако, работает только со строками, а будучи применено к числу, не будет работать:

let num = 12345; alert(num.length); // выведет undefined

Для решения проблемы преобразуем наше число к строке и найдем длину этой строки:

let num = 12345; let str = String(num); // преобразуем наше число к строке alert(str.length); // найдем длину строки

Можно не вводить промежуточную переменную str, а применить свойство length сразу к результату функции String:

let num = 12345; alert(String(num).length); // найдем длину строки

Дана переменная с числом. Найдите количество цифр в этом числе.

Даны две переменные с числами. Найдите количество цифр в одном и во втором числе, результаты сложите и выведите на экран.