2013-12-13 5 views
14

私はUglifyJSに基づく縮小ツールに付属のEnyo2を使ってアプリケーションを書いています。 !Javascript minificationなぜ偽は!1で置き換えられ、!0で真です

var t = false 

var t=!1 

を0に置き換えられ、真のと同じように置き換えられます。 私は気づきました。私はそれについての良い説明があると確信しています、私はそれを見つけることができません。何か案が?

答えて

21

明らかに1つあります。 trueまたはfalseを変換するために1または0を使用すると、より短くなりますが整数とみなされます。あなたが追加したら!それらを逆にすると、それはブール値に集約され、まだ短くなります。

13

これは値を表現する最も曖昧でない方法です。

trueは、4文字を使用し、falseは5文字を使用します。 !1 & !0 2文字を使用してください。

+0

なぜ、trueを1、falseを0にするのはなぜですか? –

+8

1&0も数値である可能性があるためです。だから私は非あいまいなものを追加したのです – Jason

+0

@ArekS 1と0はブール値ではありません。彼らは数です。あなたがそのコメントを答えに加えることができれば、比較は – Ian

2

否定は、ブールではないが真実の値を純粋なブール値に変換します。

私はChromeデベロッパーツールでこれを実行しました:

> !1 
false 
> !0 
true 

したがって、!1false!0trueと交換可能ですと交換可能です。だから私たちがそれを変更することは安全だと分かったので、次の質問はなぜですか。それはバイト数が少ないからです。細分化のポイントは、コードを小さくすることですが、互換性があります。

長文で言えば、リテラルtruefalseを圧縮するのが安全な方法ですので、ワイヤで送信するときのスペースが少なくて済みます。

8

JavaScriptでは、0はfalsy valueです。これは、ブール型として表される場合、0falseに等しいことを意味します。一方、または他の正の数であれば、偽の値ではなく、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

素敵な答えです。パフォーマンスはどうですか? !0かfalseを書いたほうがパフォーマンスが良いですか? – Cyril

関連する問題