Что ж, в последние дни я проводил викторину по 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