LoginSignup
0
1

More than 3 years have passed since last update.

Javascriptのif文条件判定におけるtrue/falseの結果について

Last updated at Posted at 2021-02-02

Javascriptの真偽判定

いつもifの条件判定で、
true/falseの結果を忘れてしまうので、
メモとして残す目的で、徒然なるままに継ぎ足してゆく。

変数を表すものとしては、var x と置く

var x = 下の表における値を代入
if(x){
    console.log(true);
} else {
    console.log(false);
}

※上記のif文のxに下記のValueを入れた時に、その結果をBoolean列に表示

Value Boolean Description
1 true Boolean プリミティブ
0 false Boolean プリミティブ
-0 false Boolean プリミティブ
'' false Boolean プリミティブ
"" false Boolean プリミティブ
'0' true Boolean プリミティブ
'aaa' true Boolean プリミティブ
'false' true Boolean プリミティブ
null false Boolean プリミティブ
'undefined' true Boolean プリミティブ
undefined false Boolean プリミティブ
NaN false Boolean プリミティブ
[].length false length == 0
[] true オブジェクト自体はあるからtrue
{} true オブジェクト自体はあるからtrue
Object.keys({}).length false length == 0
new Boolean(false) true Boolean オブジェクト
Boolean(new Boolean(false)) true Boolean オブジェクト

※注意点としては

・Booleanオブジェクトを論理値ではない値から論理値への変換に使うと想定しない挙動になる。
・代わりにBoolean関数を使ったり、二重否定演算子を使用したりすることで回避する。

var x = Boolean(val);     // 推奨
var x = !!(val);          // 推奨
var x = new Boolean(val); // 使わない

階層の深いオブジェクトの真偽判定でハマるポイント

頭の中では以下のオブジェクトのように思い描いて、
「よし!zzzの値は、aaa.xxx.yyyと指定すれば、値を取り出せるぞー!」
と思ったとしても、

{
  aaa: {
    xxx: {
      yyy: zzz
    }
  },
  bbb: ccc 
}

この場合に、実際のオブジェクトが持っている値自体が
以下のようになってしまっていると、
(xxxのプロパティ自体が存在していない状態)

{
  aaa: undefined
  bbb: ccc
}

xxxがそもそもundefinedまたはnullなので、
aaa.xxx.yyy と指定しても、

Cannot read property yyy of undefined

と怒られてしまう。。。
ちゃんとxxxが定義されて、値を持っているかを確認することが大切。

ちなみに、aaaundefinedであることを判定したい場合は、

if(typeof aaa == 'undefined'){
  // 処理内容
}

みたいな形で判定ができる。

0
1
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
0
1