Qraft(クラフト) 資格・学習クイズアプリ

JavaScript入門 練習問題 67:データ型:非数の判定

📊 Qraftユーザーの成績

  • 難易度 Bランク(レーティング1200)
  • 難易度 766位/2795問中
  • 正答率 —(0回)
レーティングは解いた人の実力と正誤から算出する難しさ(初期値1200)。ランクはその全問題中の順位(S+が最難関、F-が最易)

次のコードを実行したときのコンソールへの出力として正しいものはどれですか?

```javascript
const value = parseInt("hello"); // 文字列を数値に変換できないためNaNになる
console.log(value === NaN);
console.log(Number.isNaN(value));
```

  1. 1行目に `false`、2行目に `true` が出力される。
  2. 1行目に `true`、2行目に `false` が出力される。
  3. 1行目に `true`、2行目に `true` が出力される。
  4. 1行目に `false`、2行目に `false` が出力される。
  5. 1行目に `NaN`、2行目に `true` が出力される。
正解と解説を見る
正解:1行目に `false`、2行目に `true` が出力される。

NaN(=非数を示す特殊な値)は自身と等価比較してもfalseになるという特殊な仕様を持つため、判定にはNumber.isNaN()を使う必要があり、正解はfalseとtrueの順になります。

【正解の理由】
JavaScriptでは「NaN === NaN」は常にfalseを返します。そのため1行目の`value === NaN`はfalseになります。一方で、`Number.isNaN(value)`は値が確実にNaNであるかを正しく判定してtrueを返します。

【不正解の理由】
• 「1行目に `true`、2行目に `false` が出力される。」という説明は誤り。NaN同士の比較はtrueにならない
• 「1行目に `true`、2行目に `true` が出力される。」という説明は誤り。厳密等価演算子(===)ではNaNを判定できない
• 「1行目に `false`、2行目に `false` が出力される。」という説明は誤り。Number.isNaN()は正しく判定できるためtrueになる
• 「1行目に `NaN`、2行目に `true` が出力される。」という説明は誤り。比較演算子の結果は真偽値(boolean)になるためNaN自体は出力されない

← 前の問題問題一覧次の問題 →
アプリで解いてレーティングを上げる(無料・登録不要)