25
23

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

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

Last updated at Posted at 2018-08-25

今まであいまいだった「比較演算子を使わない条件式」での、 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 で値とデータ型を確認することで判断できそう。

25
23
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
25
23

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?