Edited at

【JavaScript】条件判定 true と false について学ぶ

More than 1 year has passed since last update.

今まであいまいだった「比較演算子を使わない条件式」での、 true / false の判定パターンについて学んだことをまとめる。

「ノンプログラマのためのJavaScript はじめの一歩」 第2章 JavaScriptの文法 より


比較演算子を使わない条件式とは

条件式には文字列や数値を指定することもできる。

例えば、次の2つの条件式はどちらも true になる。

1つめのような条件式は2つめの書き方に置き換えられる。

var name = 'Doc';

// 比較演算子を使った条件式
if (name !== '') { ... }

// 比較演算子を使わない条件式
if (name) { ... }

どうしてこのような記述ができるのか。

それは条件式に比較演算子がなかった(文字列や数値が入っている)場合、それを true / false のどちらかに判定する仕様になっているから。


比較演算子を使わない場合の true / false 判定

「データがない」とみなされる値は false 、それ以外が true となる。


false とみなされる 「データがない」 値とは

次の変数 ae を条件式に入れると false になる。

var a = 0;    // 「数値」の0

var b = 0/0; // 数値として扱うことができない(NaN)
var c = ''; // 「文字列」の空
var d = null; // 値が存在しない(null)
var e; // 値が定義されていない(undefined)

空の「配列」や「オブジェクト」は true になる。

(個人的にひっかかりそうだったので書いておく)


試してみたこと

true / false の判定基準や nullundefined の違いをわかっているようで若干ぼんやりしていたので、いくつかのパターンでどのような結果になるか試してみた。


空の配列を使った条件式

var dog = [];

if (dog) { ... } //-> true
// 条件式に入っているのが 「空の配列」 なので true

if (dog[0]) { ... } //-> false
// 条件式に入っているのが 「配列0番目の値 (定義されていない)」 なので false


falseになる値とデータ型

var dog = {

name: '',
age: null
};

console.log(dog.name); //-> 空
typeof dog.name; //-> string
// データ型が string と定義されている
// 値は空 (空の文字列)

console.log(dog.age) //-> null
typeof dog.age; //-> object
// データ型は object と定義されている
// 値が入っていない (null)

console.log(dog.breed); //-> undefined
typeof dog.breed; //-> undefined
// 値が定義されていない (undefined)


まとめ

どんな値がどちらに判定されるのかは、 false とみなされる値のパターンを覚えておけばよさそう。

値が false に含まれるかどうかは、 console.logtypeof で値とデータ型を確認することで判断できそう。