Что ж, в последние дни я проводил викторину по JS на своем телефоне и обнаружил несколько странных поведений JS, которыми я хотел бы поделиться здесь. Итак, без лишнего блаблабла, приступим.

Деление на ноль равно бесконечности:

1/0 = Infinity.

Вычтите две строки, если обе являются числами. JS преобразует их в числа:

“2009”- “1995” = 14.

В функции можно хранить больше аргументов, чем параметров:

const func = function (a, b) {
  return arguments.length;
}
const result = func(4, 3, 2, 1)
// result is 4

Побитовое НЕ инвертирует все биты в операнде и возвращает число. Он удаляет все после десятичной точки, потому что побитовые операторы неявно преобразуют свои операнды в 32-битные целые числа со знаком. Это работает независимо от того, являются ли операнды числами (с плавающей запятой) или строками, и результатом является число:

const result = ~~(12.34)
// result is 12

Global isFinite преобразует значение в число, если это возможно, но Number.isFinite этого не делает:

const result = isFinite("10") === Number.isFinite("10")
// result is false

Оператор «in» проверяет позицию, а не значение:

const arr = [1, 2, 3]
const result = 3 in arr;
// result is false

Сравнение между строками принимает порядок букв в качестве параметра:

const result = "b" > "a"
// result is true

Есть функция, которая генерирует функции, и я не знаю, почему:

const func = new Function("a", "b", "return a + b");
const result = func(1, 2)
// result is 3

Функции являются прототипом объекта instanceof (instanceof не typeof).

function bar () {}
const result = bar instanceof Object
// result is true
// typeof bar is Function

При использовании восклицательного знака значения могут быть изменены на «логический» тип.

typeof !null // It will give true.

Кроме того, JS пытается преобразовать что-либо в числа, чтобы выполнить некоторые вычисления, например:

const result = true > false; // It is true