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

Что он делает, сначала посмотрите примеры, приведенные ниже, теперь мы рассмотрим их один за другим.

console.log(null * 5);
// Output: 0
console.log(null - 1);
// Output: 6
console.log(NaN + 2);
// Output: 42
console.log("five" * 2);
// Output: NaN
console.log(false == 0);
// Output: true
console.log(null == undefined);
// Output: true
console.log(null == 0);
// Output: false
  • В первой строке, когда мы умножаем 5 на нулевое значение, поэтому он возвращает 0, потому что оператор умножения javascript проверяет тип обоих своих операндов и приводит этот операнд к числу, если это не так. Таким образом, null будет преобразован в 0, что снова даст 0.
  • Для оператора второй строки минус будет вести себя так же, как умножение, поскольку принуждает операнды к нумерации, если они еще не пронумерованы.
  • В третьем операторе у нас есть оператор плюса (также используемый для конкатенации строк), который будет выглядеть, если первый операнд имеет строковый тип, тогда он преобразует второй оператор в строку и объединит оба. Если первый оператор имеет числовой тип, он приведёт второй к числу, и результатом будет сумма двух чисел.
  • В 4-м операторе оператор умножения вернет NaN, потому что он попытается преобразовать эту строку в число, подобное этому Number («пять»), которое возвращает NaN, а арифметическая операция с NaN всегда будет возвращать NaN.
  • В пятом утверждении у нас есть оператор ==, который также приводит оба операнда к одному и тому же типу, поэтому возвращает true, даже если операнды выглядят по-разному. То же правило будет применяться к шестому и седьмому утверждениям.

Надеюсь, вы понимаете автоматическое преобразование типов, которое можно назвать случайным преобразованием, если вы напишете его непреднамеренно🙂.