[JavaScript Primer - データ型とリテラル ](https://jsprimer.net/basic/data-type/)を読んで、データ型について理解しましょう。 ## Reference - [データ型とリテラル · JavaScript Primer \#jsprimer](https://jsprimer.net/basic/data-type/) ## Mission 1 #😁EASY `"hoge"` `[]` `null` の[[データ型 (JavaScript)|データ型]]を[[console.log]]で出力するコードを書いてください。 %% 解答例 ```js console.log(typeof "hoge") console.log(typeof []) console.log(typeof null) ``` %% ## Mission 2 #🙂NORMAL [[JavaScript]]のプリミティブ型が[[イミュータブル]]であることを示すコードを書いてください。 %% 解答例 ```js const head = "hoge"; head[0] = "H"; // Index signature in type 'String' only permits reading. [2542] ``` %% > [!hint]- Hint 1 > 文字列の先頭文字を変えてみるのが簡単です。文字列は[[配列]]のようにindexでアクセスできるので...。 ## Mission 3 #🙂NORMAL 以下のコードを[[テンプレートリテラル (JavaScript)|テンプレートリテラル]]を使って書き直してください。 ```js const s = "東東東\n南南南\n" + "西西西" + "\n" + "北北北"; console.log(s); ``` %% 解答例 ```js const s = `東東東 南南南 西西西 北北北`; console.log(s); ``` or ```js const s = ` 東東東 南南南 西西西 北北北 `.trim(); console.log(s); ``` %% ## Mission 4 #🙂NORMAL 次の説明の中で正しいものを1つ選び、他の選択肢がなぜ間違っているかも説明してください。 A. `typeof null` は `"object"` を出力するのは実装バグではなく意図した仕様である B. [[undefined (JavaScript)|undefined]]はリテラルである C. `typeof []` が `"object"` を返すのは仕様バグであり、本来はオブジェクトではない D. 文字列リテラルが `"hoge".length` のように[[プロパティ (JavaScript)|プロパティ]]にアクセスできるのは、アクセス時にラッパーオブジェクトへ暗黙的[[データ型 (JavaScript)|データ型]]変換しているからである %% 解答例 正しいのはD - A: 仕様バグです. 修正の影響が大きかったため見送られてしまいました - B: undefinedはリテラルではなく[[プリミティブ型 (JavaScript)|プリミティブ型]]の値です - C: JavaScriptの配列はindexをプロパティとするオブジェクトとして扱われます %% --- *NEXT* >> [[📗TDQ-005 等価演算子と厳密等価演算子]]