[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 等価演算子と厳密等価演算子]]