Давайте поговорим об очень интересной и, возможно, иногда забавной теме в 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, даже если операнды выглядят по-разному. То же правило будет применяться к шестому и седьмому утверждениям.
Надеюсь, вы понимаете автоматическое преобразование типов, которое можно назвать случайным преобразованием, если вы напишете его непреднамеренно🙂.