1. ホーム
  2. javascript

[解決済み] JavaScriptでundefinedが上書きされないと仮定するのは、実際どのくらい危険なのか?

2023-04-11 08:36:27

質問

に対するテストについて言及されるたびに undefined , が指摘されます。 その undefined はキーワードではないので に設定することができます。 "hello" というように を使用する必要があります。 typeof x == "undefined" を使うべきです。これは私には馬鹿げているように思えます。誰もそんなことはしないでしょうし、もししたなら、その人が書いたコードを決して使わないという十分な理由になるでしょう......?

私は の一例です。 を誤って設定した人の undefinednull と仮定することを避ける理由として、このことが挙げられました。 undefined が上書きされないと仮定することを避ける理由として挙げられました。しかし、もしそうしていれば、バグは発見されなかったでしょうし、その方が良いとは思えません。

C++では、誰もが合法的に #define true false と言うのは合法ですが、誰も true を避け 0 == 0 を使ってください。あなたは、誰もそんなことをするような大バカ者はいないと思い込んでいて、もしそうなら、二度と彼らのコードを信用してはいけないのです。

に割り当てられた誰かが実際に噛んだことがありますか? undefined (に割り当てて、それがあなたのコードを壊してしまったというようなことがありますか、それともこれはもっと仮定の脅威なのでしょうか?私は、自分のコードをほんの少し読みやすくするために、チャンスをつかみたいと思っています。これは本当に悪い考えなのでしょうか?

繰り返しになりますが、私は ではなく は、再割り当てされた未定義から保護する方法を求めているのではありません。そのようなトリックはすでに100回書かれているのを見たことがあります。それらのトリックを使わないことがどれだけ危険かを聞いているのです。

どのように解決するのですか?

いいえ、一度もありません。これは、私が、ほとんどが ECMAScript 5 に準拠したモダンなブラウザで開発しているためです。ES5 標準では、以下のように規定されています。 undefined は読み取り専用になりました。もしあなたがストリクトモードを使うなら(使うべきです)、誤ってそれを修正しようとするとエラーが投げられるでしょう。

undefined = 5;
alert(undefined); // still undefined

'use strict';
undefined = 5; // throws TypeError

必要なもの ではない は、独自のスコープを持つ、ミュータブルな undefined :

(function (undefined) {
    // don't do this, because now `undefined` can be changed
    undefined = 5;
})();

定数でいい。まだ不要ですが、結構です。

(function () {
    const undefined = void 0;
})();