TypeScript で truthy を判定する

1 コード

1.1 isExisty()

1.2 isTruthy()


2 existy、falsy そして truthy

2.1 existy 関数

existy 関数は何かの存在の有無を明瞭に示すための関数です。 JavaScript には、null と undefined という「存在しないこと」を表わす 2 つの値があります。 existy は与えられた引数がこれらのいずれでもないことを確認します。 実装は次のようになります。

function existy(x) { return x != null; }

「1.2.6 関数型テイストの JavaScript」 p26 *1

2.2 falsy と truthy

以下に、条件式が falsy、つまり偽と評価される値を示す。

  • false
  • null
  • undefined
  • ''
  • 数値の 0
  • 数値の NaN

これ以外の値はすべて truthy、つまり真と評価される。

「2.5 命令文」 p14 *2


JavaScript において if 文の条件式は、その評価が「true 相当の値」(オブジェクト、空ではない文字列、0 以外の数値、そして True)であれば true と評価します。 そして「false 相当の値」(null、undefined、0、false、NaN、そして空の文字列)を false として評価します。

「3.2 プロパティの存在確認」 p55 *3

2.3 truthy 関数

existy 関数の利用によって、何かが JavaScript において存在するかどうかの判別が単純化されます。 簡単に使用できるミニマルな関数に存在意義をまとめています。 そして 2 つ目の関数、truthy は次のように定義されます。

function truthy(x) { return x != false && existy(x); }

truthy 関数は、与えられた値が true と見なされるかどうかを判定します。

「1.2.6 関数型テイストの JavaScript」 p27 *1

3 要素と概念

3.1 null

JavaScript 言語のキーワード null は、値が存在しないことを表わす特殊な値です。

「3.4 null と undefined」 p43 *4

3.2 undefined

JavaScript には、値がないことを表わす値がもう一つあります。 未定義(undefined)値は、もう少し深い意味で、値が存在しないことを表します。 初期化されていない変数の値や、存在しないオブジェクトプロパティや配列の要素を読みだしたときの値が未定義値です。 戻り値のない関数が返す値も未定義値です。


未定義値に対して typeof 演算子を使うと、未定義値を表わす "undefined" が返されます。

「3.4 null と undefined」p44 *4

3.3 !=

このような違いがあるにもかかわらず、null と undefined は両者とも値がないことを表わすので、同一のものとして扱うことができます。 等値演算子 == は両者を等しいと判定します

「3.4 null と undefined」 p44 *4


等値演算子は、同値演算子と同じような処理を行いますが、少し緩やかに比較を行います。 2 つのオペランドの型が異なる場合は、型変換を行った後に、再度比較を行います。


  • 型が異なる場合は、両方が同じ型になるように変換してから、以下の基準に基づいて、等しいかどうかを判定します。
    • どちらか一方の値が null で他方が undefined の場合、等しいと判定します。

「4.9.1 等値演算子と不等演算子」 p76 *4

3.4 !==

同値演算子(===)は、オペランドを評価し、次のような規則で、型変換を行わずに 2 つの値を比較します。


  • 2 つの値が null の場合、または 2 つの値が両方とも undefined の場合、2 つの値は等しいと判定します。


  • 両方の値が文字列で、同じ位置位置に同じ 16 ビット値(3.2 節のコラムを参照)が含まれる場合、2 つの値を等しいと判定します。

「4.9.1 等値演算子と不等演算子」p75 *4


変数が null かどうかを確認したい場合の最善の方法は、値が null と同値であるかを評価することです。

「14.2 typeof null は 'object' を返す」p155 *5

3.5 0

††意図的に 0 が真と判定される仕様にしています。 0 は false と定義されることが多いようですが、これは C 言語時代の遺物にすぎません。 もし 0 を偽と判定したいのであれば、そのような場合が考えられる箇所には truthy 関数を使わないことです。

「1.2.6 関数型テイストの JavaScript」 p27 *1


A 参照

*1 Fogus, Michael 『JavaScript で学ぶ関数型プログラミング』 2014 年 オライリー・ジャパン ISBN 9784873116600

*2 Crockford, Douglas 『JavaScript: The Good Parts ―「よいパーツ」によるベストプラクティス』 2008 年 オライリー・ジャパン ISBN 9784873113913

*3 Zakas, Nicholas C. 『オブジェクト指向 JavaScript の原則 2014 年 オライリー・ジャパン ISBN 9784873116815

*4 Flanagan, David 『JavaScript 第 6 版』 2012 年 オライリー・ジャパン ISBN 9784873115733

*5 Lindley, Cody 『開眼! JavaScript ――言語使用から学ぶjavaScript の本質』2013 年 オライリー・ジャパン ISBN 9784873116211


Amazon アソシエイト