2013-03-16 7 views
7

Я заметил, что компилятор Closure компилирует true и false (или 1 и 0) как! 0 и! 1. Это не имеет смысла для меня, так как в два раза больше символов, чем 1 и 0. Есть ли причина для этого? Есть ли польза?Is 0 и! 1 лучше, чем 1 и 0?

Спасибо.

ответ

10

1 !== true и 0 !== false, но !0 === true и !1 === false. Компилятор просто гарантирует, что тип остается логическим.

Рассмотрим следующий пример:

var a = true; 

if(a === true) { 
    console.log('True!'); 
} 

if(a === 1) { 
    console.log('You should never see this.'); 
} 

Если изменить первую строку var a = 1; первым условным будет ложным, и второе верно. С помощью var a = !0; скрипт будет работать правильно.

+0

'! 0' имеет дополнительное преимущество при сохранении 2 символов, а'! 1' имеет дополнительное преимущество при сохранении 3 при минимизации. Путь чрезмерно оптимизирован, но если машина делает оптимизацию, кого это волнует. – Norguard

+0

Интересно, спасибо! – Suffick