# JavaScriptで値をブール値に変換する2つの方法

私のお気に入りは、!!を使う方法です。 AirbnbのJavaScriptスタイルガイドでも推奨されている方法です👍

Boolean(value);!!value;

# 値をブール値に変換する

# 文字列

const string = 'string';!!string; // trueBoolean(string); // true

# 数値

const number = 100;!!number; // trueBoolean(number); // true

# 曖昧な値

JavaScriptには、6つの曖昧な値があります。 6つのファルシー値があります。 これらのいずれかをbooleanfalseが返されます。

falseundefinednullNaN0"" (empty string)

ファルシーリストにないものは、trueが返されます👍

この件についての詳細は。

# Examples

!!をファルシー値に適用する

!!false; // false!!undefined; // false!!null; // false!!NaN; // false!!0; // false!!''; // false

Applying Boolean on falsy values

Boolean(false); // falseBoolean(undefined); // falseBoolean(null); // falseBoolean(NaN); // falseBoolean(0); // falseBoolean(''); // false

# How the the !!”の仕組み

最初の!!valuefalsetrue!!!

const value = 'string';!value; // false!!value; // true

# ‘false’ に注意

const value = 'false';!!value; // trueBoolean(value); // true

"false"'falseとなっていますが、実際には文字列です。 ほとんどの人はこれに引っかからないと思いますが、私のように、人が自分に仕掛けたおかしなマインドトリックに注意したい人はいるかもしれません😂

# Community Input

@tassoevan : このように配列からファルシーな値をフィルタリングするのは楽しいですね。 myArray.filter(Boolean)

@fleonus : !+!は、クールに、そして人々を混乱させるために好きです。

!!Boolean

# どっちを使う?

この記事にはたくさんのコメントが寄せられました。 Booleanの方がより明示的であるため、そちらを好む人もいます。

しかし、You Don’t Know JSのKyle Simpson氏は、どちらも明示的であると述べています。

// better (works explicitly):if (!!a) {}// also great (works explicitly):if (Boolean(a)) {}

Kyle Simpson: YDKJS – Coercion

私はあなたに良い答えを出せないと思います。 あなたのチームのことは、私よりもあなたの方がよく知っているでしょう。 私は自分の個人的なプロジェクトでは、!!Booleanを選ぶかもしれません。 どちらを選ぶにしても、最も重要なことは一貫性を保つことです。 コードベースの中で、この2つの間を行ったり来たりしてはいけません。

素晴らしいコメントをいただきました:

@patrick_developerさん。

@patrick_developer: 私は、それぞれを使用する異なるコードベースを提示された場合に備えて、両方を理解すべきだと言います。

つまり、どちらが優れているということではないのです。 こちらはどちらかというと好みの問題だと思います。 だから、間違ってはいけないのです。 しかし、両方を理解することを奪ってはいけません。 Patrickが言ったように、「知識は力なり」です💪

# 新しいBooleanを避ける

オブジェクト型ではなくプリミティブを使う

var str = 'str';// Avoidtypeof new Boolean(str); // object// Preferredtypeof Boolean(str); // booleantypeof !!str; // boolean

CJ J.: new BooleanはBooleanではなく、Booleanのインスタンスであることは注目に値します。 プリミティブの方が安価で、オブジェクトタイプよりも優先されるべきです。

CJ J: new Boolean(str)Boolean(str)Boolean(str)!!str!!NOT() を 2 回連続で実行するのではなく)。

CJ J. プリミティブは不変なので、参照を共有でき、インスタンスの状態を保持する必要がないので、安価です。 単にtruefalsenew Boolean(str)new Boolean(str)Boolean()オブジェクトがインスタンス化されます。

ありがとうございます。 CJ J .

# Boolean Constructor で空の文字列を削除する

CJ J.: これは典型的な例です。 カンマで区切られた文字列のリストを取得して、空の文字列をフィルタリングしたい場合、Array.prototype.filterにブール値のコンストラクタ関数を渡せば、有効な文字列だけの配列を残して、長さゼロの文字列を自動的に取り除くことができます。

var str = 'some,list,,of,values';var arr = str.split(',');arr; // arr.filter(Boolean); // 

ありがとうございます。 CJ J .

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です