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" продолжа