JavaScriptのTruthyな値とFalsyな値

概要

JavaScriptでは、全ての値は真偽値のコンテキストで「truthy」または「falsy」に評価されます。この章では、どのような値がtruthyまたはfalsyとして扱われるか、またその重要性について解説します。

目次

  1. TruthyとFalsyな値とは
  2. 論理否定演算子 (!!!)
  3. 特定の値に対するTruthyとFalsyの評価
  4. 練習問題

1. TruthyとFalsyな値とは

  • Falsyな値は、論理コンテキストでfalseとして扱われる値です。これらの値には、0''(空文字列)、nullundefinedNaNが含まれます。
  • Truthyな値は、論理コンテキストでtrueとして扱われる値です。これは、Falsyな値以外のすべての値です。

2. 論理否定演算子 (!!!)

  • !演算子は値を論理値に変換し、その逆を返します。つまり、Truthyな値はfalseに、Falsyな値はtrueになります。
  • !!演算子(!を二回使用)は値を論理値に変換しますが、値を逆転させることなくそのまま返します。つまり、Truthyな値はtrueに、Falsyな値はfalseになります。

3. 特定の値に対するTruthyとFalsyの評価

  • ''(空文字列)、0nullundefinedNaNは、!!を使用して確認するとfalseを返します。
  • それ以外の値('a'1-1[]['a']{}{ a: 'b' }など)はtrueを返します。

4. 練習問題

下記console.logの出力を答えよ

const boolean = true
console.log('boolean=>', boolean)
console.log('!boolean=>', !boolean)
console.log('!!boolean=>', !!boolean)
console.log('!!!boolean=>', !!!boolean)

console.log("!!''=>", !!'')
console.log("!!'a'=>", !!'a')
console.log('!!0=>', !!0)
console.log('!!1=>', !!1)
console.log('!!-1=>', !!-1)
console.log('!![]=>', !![])
console.log("!!['a']=>", !!['a'])
console.log('!!{}=>', !!{})
console.log("!!{a: 'b'}=>", !!{ a: 'b' })
console.log('!!null=>', !!null)
console.log('!!undefined=>', !!undefined)
console.log('!!NaN=>', !!NaN)

練習問題の解答

以下に練習問題の各console.logステートメントの出力結果を示します。

  1. console.log('boolean=>', boolean) => true
  2. console.log('!boolean=>', !boolean) => false
  3. console.log('!!boolean=>', !!boolean) => true
  4. console.log('!!!boolean=>', !!!boolean) => false
  5. console.log("!!''=>", !!'') => false
  6. console.log("!!'a'=>", !!'a') => true
  7. console.log('!!0=>', !!0) => false
  8. console.log('!!1=>', !!1) => true
  9. console.log('!!-1=>', !!-1) => true
  10. console.log('!![]=>', !![]) => true
  11. console.log("!!['a']=>", !!['a']) => true
  12. console.log('!!{}=>', !!{}) => true
  13. console.log("!!{a: 'b'}=>", !!{ a: 'b' }) => true
  14. console.log('!!null=>', !!null) => false
  15. console.log('!!undefined=>', !!undefined) => false
  16. console.log('!!NaN=>', !!NaN) => false