JavaScriptの落とし穴と、コードを書くときに気にかけると良いこと
クイズです。以下はあるアプリケーションのコードの一部です。
<div id="hoge">hoge</div>
const el = document.getElementById('hoge')
変数elにはどのような値が入るでしょうか。
正解はid="hoge"のdiv要素です。
しかし、これだけだとなんともいえないと答えた人も正解です!
undefinedになるかもしれないし、1になるかもしれないし、tamibouzという文字列になる可能性も秘めています。
JavaScriptでは既存のオブジェクトのメソッドを上書きしたり、削除したり、追加したりすることが容易です。
先ほどの例で、もし開発チームの誰かが、別のJSファイルで以下のようなことをしていたらどうでしょうか。
document.getElementById = () => null
恐ろしいことに、すべてのdocument.getElementByIdの結果は問答無用でnullになります。
これは過激な例ですが、これに近いことがプロジェクト内で起きることがあります。
ArrayやStringのようなネイティブなオブジェクトではなく、そのアプリケーションのために作られたオブジェクト(ユーザーを表すUserオブジェクトや、商品を表すProductオブジェクトなど)でも、メソッドの変更や削除は容易です。
JavaScriptでは、このようなオブジェクトへの変更が容易に、しかも、どこからでもできてしまいます。
そのため、自分でコードを書く時は、「このコードは既存のオブジェクトを変更していないか」ということを頭の片隅におくと良いと思っています。
最近のコメント