Найти тему
Стать программистом

Автоматическое преобразование типов.

https://jaxenter.com/wp-content/uploads/2018/06/shutterstock_489881524.jpg
https://jaxenter.com/wp-content/uploads/2018/06/shutterstock_489881524.jpg

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

console.log(8 * null)
// → 0
console.log("5" - 1)
// → 4
console.log("5" + 1)
// → 51
console.log("five" * 2)
// → NaN
console.log(false == 0)
// → true

Когда оператор применяется к «неправильному» типу значения, JavaScript тихо преобразует это значение в нужный ему тип, используя набор правил, которые часто не соответствуют вашим ожиданиям или ожиданиям. Это называется принуждением типов.

Нуль в первом выражении становится 0, а "5" во втором выражении становится "5". Тем не менее, в третьем выражении "+" пытается объединить строки перед добавлением чисел, поэтому "1" преобразуется в "1". Когда что-то, что не отображается на число очевидным образом (например, "5" или "NaN"), преобразуется в число, вы получаете значение NaN.

Дальнейшие арифметические операции над "NaN" продолжают производить "NaN", поэтому, если вы обнаружите, что один из них попал в неожиданное место, ищите случайные преобразования типов.

При сравнении значений одного и того же типа с использованием "==" результат легко предсказать: вы должны получить значение true, если оба значения одинаковы, за исключением случая NaN.

Но когда типы различаются, JavaScript использует сложный и запутанный набор правил, чтобы определить, что делать. В большинстве случаев он просто пытается преобразовать одно из значений в тип другого значения. Однако, когда null или undefined встречается с любой стороны от оператора, он выдает true, только если обе стороны имеют одну из нулевых или неопределенных.

console.log(null == undefined);
// → true
console.log(null == 0);
// → false

Такое поведение часто полезно. Если вы хотите проверить, имеет ли значение действительное значение вместо нулевого или неопределенного, вы можете сравнить его с нулевым с помощью оператора "==" или "! =". Но что, если вы хотите проверить, относится ли что-либо к точному значению false?

Выражения типа "0 == false" и "" == false также имеют значение true из-за автоматического преобразования типов. Если вы не хотите, чтобы выполнялись какие-либо преобразования типов, есть два дополнительных оператора: "===" и "! ==". Первый проверяет, точно ли значение равно другому, а второй проверяет, не равно ли оно точно. Так что "" === false это ложь, как и ожидалось.

Я рекомендую использовать трехсимвольные операторы сравнения для защиты от неожиданных преобразований типов. Но если вы уверены, что типы с обеих сторон будут одинаковыми, проблем с использованием более коротких операторов не возникает.

Числа, строки, логические значения и неопределенные значения создаются путем ввода их имени (true, null) или значения (13, «abc»).

Вы можете комбинировать и преобразовывать значения с помощью операторов. Бинарные операторы для арифметики (+, -, *, / и%), конкатенации строк (+), сравнения (==,! =, ===,! ==,, <=,> =) и логика (&&, ||), а также несколько унарных операторов ("-" для отрицания числа, "!" для логического отрицания и "typeof" для поиска типа значения) и троичный оператор "? :" для выбора одного из двух значений на основе третье значение.

Это дает вам достаточно информации для использования JavaScript в качестве карманного калькулятора, но не на полную мощность.

https://www.millionpodarkov.ru/incoming_img/enter-office.ru/8920707.jpg
https://www.millionpodarkov.ru/incoming_img/enter-office.ru/8920707.jpg

Благодарю за прочтение статьи. Подписывайтесь на канал "Стать программистом"