「JavaScript Primer」を読んでみた

本投稿は TECOTEC Advent Calendar 2022 の3日目の記事です。

こんにちは。次世代デジタル基盤開発事業部の安彦です。

今回はJavaScriptについて1から学べる書籍「JavaScript Primer 迷わないための入門書」(以下「jsprimer」という)を読んで、気になった項目を紹介します!

https://asciidwango.jp/post/631313582241579008/javascript-primer
asciidwango.jp

目次

はじめに

jsprimerは、JavaScript(以下「js」という)の文法からアプリ開発まで学べる書籍です。

無料公開されているウェブサイト版では、サンプルコードを実行・編集できるため、手を動かして学びたい方にお勧めです!

ウェブサイト版のサンプルコード実行・編集エリア

私は、新卒入社から1年ほどTypeScriptでのフロントエンド・バックエンド開発を経験しました。

その中で、jsの非推奨な関数や、悪いコードを目にしたり、書いてしまったりすることが多かったため、jsを1から振り返ることができるjsprimerを読みました。

さっそく、気になった項目を紹介していきます。

const は定数ではない

const は変数を宣言するキーワードの1つで、定数宣言と間違えやすい働きをします。

const で数値や文字列などプリミティブな値を変数宣言すると変更できません。

// TEN_NUMBERという変数は常に10という値を示す
const TEN_NUMBER = 10;

しかし、const でオブジェクトを変数宣言すると、「プロパティ」が変更できます。

// `const`でオブジェクトを定義している
const object = {
    key: "値"
};
// オブジェクトのプロパティは変更可能
object.key = "新しい値";

const でオブジェクトを宣言する場合に注意が必要ですね。

OR演算子Nullish coalescing演算子 の違い

jsには、2つの値から1つの値を選択する演算子がいくつかあります。

なかでもOR演算子とNullish coalescing演算子は使い方が非常に似ていると思います。

OR演算子(||)は、左辺の値が truthy ならそのまま値を返し、 falsy なら右辺の値を返します。1

const a = 0 // aはfalsy
console.log(a || 100) // => 100

Nullish coalescing演算子(??)は、左辺の値が nullish (null, undefined) なら右辺の値を返します。

const a = 0 // aはnullishでない
console.log(a ?? 100) // => 0

0 や空文字 ""falsy ですが、 nullish でないので、注意して使い分ける必要があります。

Optional chaining演算子(?.)

続いては、オブジェクトから値を取り出す際に使用する演算子です。

以下のように、期待するオブジェクトと実際のオブジェクトに差がある場合を考えます。

// 期待する構造
const expected = {
  window: {
    title: 'タイトル',
  },
}

// 実際の値
const actual = {
  title: 'タイトル',
}

存在しない window プロパティは参照可能です。

しかし、存在しないプロパティのプロパティを参照するとエラーになってしまいます。

console.log(actual.window) // -> undefined

console.log(actual.window.title) // -> TypeError: Cannot read properties of undefined

そこで、Optional chaining演算子を使用します。

プロパティの参照に用いると、プロパティが nullish の時に undefined を返します。

オブジェクトがネストしてあっても、 nullish なプロパティを参照した時点で undefined を返してくれます。

私は、Nullish coalescing演算子と組み合わせる使い方が多かったです。

// undefined ?? '' の比較になる
console.log(actual?.window?.title ?? '') // -> ''

後方互換が怖い

第一部: おわりに」では、次のように述べられています。

ECMAScriptやJavaScriptは常に変化しています。 そのため、ライブラリによってはいつのまにかDeprecated(非推奨)となっている場合もあるため、 まずは元となるものを見ることが重要です。

jsは後方互換のために破壊的変更が少ないので、古い書き方のコードでも動いてしまいます。

私は、ESLintなどの静的検証ツールを使って、非推奨のコードを探す手がかりしていました。

おわりに

今回取り上げる項目は以上になります。

他にも、以下の項目は改めて知ることが多かったです。

jsprimerはjsを使っているけど、経験・知識が浅いという方にお勧めの内容だと思います。

最後まで読んでいただき、ありがとうございます。

jsprimer.net www.tecotec.co.jp


  1. truthyfalsyとは、boolean型に変換したとき、truefalseとみなされる値のことです。
    falsy0, -0, 0n, "", null, undefined, NaN の8つ、truthyはそれ以外となります。