Результат Boolean(-1) и Boolean(-1) в JS Функция Boolean() преобразует переданное значение в логический тип. В JavaScript любое число, кроме 0 и NaN, трактуется как true. -1 — ненулевое число, поэтому Boolean(-1) возвращает true. Побитовый оператор NOT () меняет каждый бит числа. Формула операции: ~x = -(x+1). -1 = -(-1 + 1) = -0 = 0. При преобразовании 0 в Boolean получается false. Итак: Boolean(-1) = true, а Boolean(-1) = false. Такой подход применяют для быстрой проверки ненулевых значений и при выполнении битовых операций.
Что вернут Boolean(-1) и Boolean(~-1) в JavaScript?
Результат Boolean(-1) и Boolean(-1) в JS Функция Boolean() преобразует переданное значение в логический тип. В JavaScript любое число, кроме 0 и NaN, трактуется как true. -1 — ненулевое число, поэтому Boolean(-1)…
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Результат Boolean(-1) и Boolean(~-1) в JS
- Функция Boolean() преобразует переданное значение в логический тип.
- В JavaScript любое число, кроме 0 и NaN, трактуется как true.
- -1 — ненулевое число, поэтому Boolean(-1) возвращает true.
- Побитовый оператор NOT (~) меняет каждый бит числа. Формула операции: ~x = -(x+1).
- ~-1 = -(-1 + 1) = -0 = 0.
- При преобразовании 0 в Boolean получается false.
- Итак: Boolean(-1) = true, а Boolean(~-1) = false.
- Такой подход применяют для быстрой проверки ненулевых значений и при выполнении битовых операций.
Развёрнутый ответ
Основной результат
В JavaScript оператор Boolean() приводит значение к логическому типу. Любое значение, не относящееся к falsy (например, 0, "", null, undefined, NaN, false), преобразуется в true.
Разберём оба выражения по отдельности:
- Вызов
Boolean(-1)преобразует число-1в0, поскольку оно не являетсяtrueи не относится к falsy-значениям. - В выражении
Boolean(~-1)сначала выполняется побитовое NOT~для значения-1: - Выражение~-1означает побитовое отрицание числа-1. В JavaScript числа при побитовых операциях рассматриваются как 32-битные знаковые значения, поэтому-1в двоичном представлении состоит из 32 единиц. - Оператор побитового отрицания~меняет каждый бит на противоположный. Для-1результатом будет0, то есть все биты станут нулевыми. - Поэтому выражение~-1даёт значение0. - ЗатемBoolean(0)возвращаетfalse, поскольку0является falsy-значением.
Результат:
Boolean(-1) === true
Boolean(~-1) === false
Что важно запомнить
- В JavaScript любое ненулевое число — как положительное, так и отрицательное — преобразуется в
true. - Побитовое отрицание
~инвертирует все биты значения, рассматриваемого как 32-битное знаковое целое: В данном случае~x === -(x+1). - Если используется
x = -1, выполняется~(-1) = 0. ПосколькуBoolean(0) === false, результатом становится соответствующее значение.
Практическое применение
Это поведение необходимо учитывать при сочетании побитовых операций с логическими преобразованиями, в том числе в условиях. Выражение ~x нередко применяют, чтобы проверить наличие найденного индекса: ~(-1) === 0 является falsy, а остальные индексы — truthy, например if(~arr.indexOf(value)). Это распространённый идиоматичный приём JavaScript, однако для его корректного понимания важно разбираться в битовой арифметике.