ES5でもローカル変数のundefinedは上書き可能
きっかけ
昨日、東京Node学園に行ってきたのですが、その中のトークの一つで、
undefinedは上書きできてしまうから、if (a === undefined)
は用心しよう的な話がありました。
「あれ?ES5で、undefinedは上書きできないって、何かで読んだような・・・」と思い、ググってみました。
グローバルのundefinedは上書けないが・・・
多分、読んだサイトはコチラ↓
とてもわかりやすいです。
曰く、グローバルはやはり上書きできない、がローカルはできる!!!
コード
グローバルの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)
とかはやっぱり使わないです!