なっく日報

技術やら生活やらのメモ

ES5でもローカル変数のundefinedは上書き可能

きっかけ

昨日、東京Node学園に行ってきたのですが、その中のトークの一つで、

undefinedは上書きできてしまうから、if (a === undefined)は用心しよう的な話がありました。

「あれ?ES5で、undefinedは上書きできないって、何かで読んだような・・・」と思い、ググってみました。

グローバルのundefinedは上書けないが・・・

多分、読んだサイトはコチラ↓

d.hatena.ne.jp

とてもわかりやすいです。

曰く、グローバルはやはり上書きできない、がローカルはできる!!!

コード

グローバルのundefined

'use strict';
undefined = 1;
console.log(undefined);

TypeError: Cannot assign to read only property 'undefined' of #<Object>

ローカルのundefined

'use strict';
(function() {
  var undefined = 1;
  console.log(undefined);
})();

1

まとめ

ローカル変数のundefinedには代入できてしまいました。
残念な仕様だ。。。
とはいえ、サーバサイドだけならif (a !== void 0)とかはやっぱり使わないです!