В чем разница между логическим (foo.bar) и!!foo.bar?

В javascript Я видел использование

if (!!foo.bar) {
    doSomething();
}

Какова производительность и другие различия между этим и

if (Boolean(foo.bar)) {
    doSomething();
}

?

Есть ли накладные расходы на использование конструктор Типизирование по отрицанию?

Другой (лучший) пример:

doSomethingWithBoolean(!!foo.bar);

4 ответа

Решение

По телефону Boolean(foo.bar), вы получаете завернутый логический объект, который будет иметь некоторые дополнительные функциональные возможности объекта (и здесь вы не хотите их)

С помощью !!foo.bar вы получите логический литерал, так что я думаю, что эта оценка будет быстрой.

Я не думаю, что возникнут какие-либо существенные проблемы с производительностью. !! foo.bar делает то же самое с меньшим набором текста.

С логическим значением (foo.bar) может возникнуть очень и очень небольшая проблема с производительностью, так как при этом используется конструктор, но с современным оборудованием, которое игнорируется.

Ведь я просто буду использовать foo.bar или ! Foo.bar

Двойное отрицание просто печатать быстрее и сокращает количество файлов. Это обычная техника сжатия.

Это может быть (чуть-чуть) медленнее, но так как это вездесущий ярлык, я думаю, что есть оптимизация компилятора. Не придирайтесь к деталям реализации!

В Javascript, с

if (Boolean(foo.bar)) {
    doSomething();
}

doSomething будет выполняться, так как Boolean() создает ненулевой объект, даже если он Boolean(false), "Boolean" возвращает объект, "!!" возвращает логическое значение, например, true/false. Мой источник, чтобы сказать это здесь.

PS: Boolean, с заглавными буквами в начале, является объектом Javascript

Другие вопросы по тегам