Подскажите, пожалуйста, как получилась единица?
+!{}[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
Комментариев нет:
Отправить комментарий