Страницы

Поиск по вопросам

вторник, 5 марта 2019 г.

Приведение типов в +!{}[0]

Подскажите, пожалуйста, как получилась единица?
+!{}[0] // =1
Спасибо!


Ответ

tl;dr; {}[0] → undefined, !undefined → true, +true → 1

Bracket notation
Первое, что используется в данном выражении: Bracket notation - возможность доступа к свойствам объектов, с использованием квадратных скобок и строкового ключа.
{}[0] - попытка взять свойство с именем 0 в пустом объекте. Так как такое свойство отсутствует - будет получен закономерный результат undefined

оператор логического отрицания(!)
Далее, к результату (undefined) применяется оператор логического отрицания(!). Данный оператор вернет применяет к операнду абстрактный метод ToBoolean, и инвертирует результат.
Как можно заметить из таблицы, для undefined результат ToBoolean(undefined) → false, после инвертирования получаем true

унарный оператор +
Далее, к результату (true) применяется унарный оператор +, который просто переводит результат в число. Для этого используется абстрактная функция ToNumber
Как можно заметить из таблицы, для true результат ToNumber(true) → 1

Комментариев нет:

Отправить комментарий