logo
コーディング

更新日

まだ使ってる?今は非推奨となったJavaScriptの書き方

いつも何気なく使っていたコードをふと調べ直してみると、知らないうちに「Deprecated(非推奨)」と書かれている…なんてこともありますよね。今回はJavaScriptを書いていて出くわした非推奨となったものをいくつか紹介します。

document.write

画面にテキストを表示する document.write 。JavaScript の勉強を始めて最初に書いたコードがこれだったという方もいるのではないでしょうか?これはブラウザーのレンダリングに悪影響が出たり、DOM への影響などを考慮して「強く非推奨」とされています。

これまでの記述例:

document.write("やっほーい");

解決策 1:textContent や innerHTML を使う

代わりに文字列を書き換える textContent や、HTML も含めた文字列を挿入できる innerHTML を使いましょう。document.write よりも影響範囲が狭く、不具合を防げます。以下の例では HTML で「text」という ID のついた要素がある場合の書き方です。

記述例(textContent):

const text = document.getElementById("text");
text.textContent = "やっほーい";

記述例(innerHTML):

const text = document.getElementById("text");
text.innerHTML = "<strong>やっほーい</strong>";

解決策 2:insertAdjacentHTML() を使う

また、insertAdjacentHTML() も利用できます。第一引数で挿入する場所、第二引数で挿入したいテキストを指定します。HTML タグも含められます。挿入する場所は以下の 4 つが指定できます。

  • beforebegin … 要素の直前に挿入
  • afterbegin … 要素内部の、最初の子要素の前に挿入
  • beforeend … 要素内部の、最後の子要素の後に挿入
  • afterend … 要素の直後に挿入
<!-- beforebegin -->
<p>
<!-- afterbegin -->
こんにちはー
<!-- beforeend -->
</p>
<!-- afterend -->

記述例(insertAdjacentHTML):

const text = document.getElementById("text");
text.insertAdjacentHTML("afterbegin", "<strong>やっほーい</strong>");

document.write() - HTML Standard

keyCode

入力されたキーの種類を判定するもので、keydownkeyup イベントと組み合わせて利用します。これまでは event.keyCode として利用していましたが、非推奨となり Web 標準から削除されるため、既存のコードは更新するよう書かれています。

これまでの記述例:

window.addEventListener("keydown", (event) => {
  if (event.keyCode === 39) {
    console.log("右矢印キー");
  }
});

解決策:key を使う

keyCode では入力したキーを数値で返していましたが、key ではそれぞれに割り当てられた文字列を返します。アルファベットや数字はそのままですが、スペースや矢印キーなどはJavaScript Event KeyCodesで確認できます。入力されたキーを表示してくれるサイトです。大きく表示されるキーコードではなく、画面左下に表示される「event.key」を参照するといいでしょう。

記述例:

window.addEventListener("keydown", (event) => {
  if (event.key === "ArrowRight") {
    console.log("右矢印キー");
  }
});

KeyboardEvent.keyCode - Web API | MDN

substr

substr は任意の文字列の中から指定した部分を切り出すためのメソッドです。「○ 文字目から △ 文字分切り出す」というように、開始位置と文字数を指定します(数値は 0 から数えます)。もともと ECMAScript 言語として認められていなかったので、非推奨とされています。

これまでの記述例:

var str = "今日はいい天気ですね";
console.log(str.substr(3, 4));
// → いい天気

解決策:substring を使う

substr が開始位置と文字数を指定していたのに対して、substring は開始位置と終了位置を指定します。開始位置は+1 した数値を記述する点に注意しましょう。

記述例:

var str = "今日はいい天気ですね";
console.log(str.substring(3, 7));
// → いい天気

String.prototype.substr() - JavaScript | MDN

var

変数を指定するための var は、同じ変数名が複数あってもエラーとして検知されなかったり、ブロックスコープに対応できないなど、意図しないバグが発生しやすい仕様となっています。ここ 2、3 年で書かれた書籍などでは見かけることも少なくなりましたが、過去の書籍や記事には登場しているため、コードを参考にするときは注意が必要です。

これまでの記述例:

var test = "うぇーい";
var test = "げへへ";
// ↑ 同じ変数名なのにエラーにならない!

解決策:

再代入できるが、再宣言はできない let 、または再代入も再宣言もできない const で定義しましょう。うっかり同じ変数名で書き換えてしまう前にエラーとなるので、バグに気づきやすくなります。コードの可読性も上がりますよ。let はループで使われたりしますね。再代入の必要がなければ、極力 const を使うといいでしょう。

記述例(let):

for (let i = 1; i <= 5; i++) {
  console.log(`${i} 回目`);
}

記述例(const):

const greeting = "おはよう朝だね、まだ眠いけど大丈夫、大丈夫";

var は明確に非推奨とは書かれていませんが、前述の理由からなるべく letconst を利用するといいでしょう。


Web の世界はアップデートが多いので、常にアンテナを貼って学び続けることが大切ですね!