В чем разница между логическим (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