私はUglifyJSに基づく縮小ツールに付属のEnyo2を使ってアプリケーションを書いています。 !Javascript minificationなぜ偽は!1で置き換えられ、!0で真です
var t = false
が
var t=!1
を0に置き換えられ、真のと同じように置き換えられます。 私は気づきました。私はそれについての良い説明があると確信しています、私はそれを見つけることができません。何か案が?
私はUglifyJSに基づく縮小ツールに付属のEnyo2を使ってアプリケーションを書いています。 !Javascript minificationなぜ偽は!1で置き換えられ、!0で真です
var t = false
が
var t=!1
を0に置き換えられ、真のと同じように置き換えられます。 私は気づきました。私はそれについての良い説明があると確信しています、私はそれを見つけることができません。何か案が?
明らかに1つあります。 trueまたはfalseを変換するために1または0を使用すると、より短くなりますが整数とみなされます。あなたが追加したら!それらを逆にすると、それはブール値に集約され、まだ短くなります。
これは値を表現する最も曖昧でない方法です。
true
は、4文字を使用し、false
は5文字を使用します。 !1
& !0
2文字を使用してください。
否定は、ブールではないが真実の値を純粋なブール値に変換します。
私はChromeデベロッパーツールでこれを実行しました:
> !1
false
> !0
true
したがって、!1
はfalse
と!0
true
と交換可能ですと交換可能です。だから私たちがそれを変更することは安全だと分かったので、次の質問はなぜですか。それはバイト数が少ないからです。細分化のポイントは、コードを小さくすることですが、互換性があります。
長文で言えば、リテラルtrue
とfalse
を圧縮するのが安全な方法ですので、ワイヤで送信するときのスペースが少なくて済みます。
JavaScriptでは、0はfalsy valueです。これは、ブール型として表される場合、0
がfalse
に等しいことを意味します。一方、または他の正の数であれば、偽の値ではなく、true
と等しくなります。
ここでは単に設定できます
t = 0; // false
t = 1; // true
これに伴う問題は、これらの値は整数(数字)とないブール値(真または偽)であるということです。厳密な等価性チェック(===
)を使用して、我々は見つけるだろう:
t = 0;
t == false; // true
t === false; // false
The !
operatorは、値の論理NOT演算を実行し、ブールに任意の値に変換する簡単な方法として使用することができます。
t = !1;
t == false; // true
t === false; // true
パフォーマンス上、if (!t)
とif (t == true)
の間にnot really much differenceがありますが、細分化の点でこれはJavaScriptを7バイト減らし、少し速くダウンロードできるようにします。
素敵な答えです。パフォーマンスはどうですか? !0かfalseを書いたほうがパフォーマンスが良いですか? – Cyril
なぜ、trueを1、falseを0にするのはなぜですか? –
1&0も数値である可能性があるためです。だから私は非あいまいなものを追加したのです – Jason
@ArekS 1と0はブール値ではありません。彼らは数です。あなたがそのコメントを答えに加えることができれば、比較は – Ian