uglify minifier example es6 compress javascript minify uglifyjs

minifier - La reducción de Javascript por qué se reemplaza con falso con! 1 y es cierto con! 0



uglify npm (4)

Esta pregunta ya tiene una respuesta aquí:

Estoy escribiendo una aplicación usando Enyo2 que viene con una herramienta de minificación basada en UglifyJS. Me he dado cuenta de que:

var t = false

se sustituye por

var t=!1

De la misma manera se reemplaza true por! 0. Estoy seguro de que hay una buena explicación para eso, simplemente no puedo encontrarla. ¿Alguna idea?


Aparentemente hay uno. Si usa 1 o 0 para traducir verdadero o falso, sería más corto pero se vería como números enteros. Si añades! Al frente y al revés, se unirá en booleanos y aún será corto.


En JavaScript, 0 es un valor falso . Esto significa que 0 equivale a false cuando se representa como un tipo booleano. 1 por otro lado; o cualquier otro número positivo para esa materia, no es un valor falso y será igual a true .

Aquí podríamos simplemente establecer:

t = 0; // false t = 1; // true

El problema con esto es que estos valores son enteros (números) y no valores booleanos ( verdaderos o falsos ). Usando un estricto control de igualdad ( === ) encontraríamos:

t = 0; t == false; // true t === false; // false

El el operador realiza una operación lógica NO en el valor, y se puede utilizar como una forma rápida de convertir cualquier valor a booleano:

t = !1; t == false; // true t === false; // true

En cuanto al rendimiento, realmente no hay mucha diferencia entre if (!t) y if (t == true) , sin embargo, en términos de minificación, esto reduce nuestro JavaScript en 7 bytes, lo que permite que se descargue un poco más rápido.


Es la forma no ambigua más pequeña de expresar el valor.

true usa 4 caracteres en el cable y false usa 5 caracteres. !1 & !0 usa 2 caracteres.


La negación convierte un valor no booleano, pero verdadero en un booleano puro.

Ejecuté esto en Chrome Developer Tools:

> !1 false > !0 true

Por lo tanto !1 es intercambiable con false y !0 es intercambiable con true . Así que ahora que sabemos que es seguro cambiarlo, la siguiente pregunta es por qué. Bueno, porque es menos bytes. El punto de minificación es hacer el código más pequeño, pero compatible.

En pocas palabras, es una forma segura de comprimir el true y el false literal para que ocupen menos espacio cuando se transmiten por el cable.