[解決済み] JavaScriptでundefinedが上書きされないと仮定するのは、実際どのくらい危険なのか?
質問
に対するテストについて言及されるたびに
undefined
,
が指摘されます。
その
undefined
はキーワードではないので
に設定することができます。
"hello"
というように
を使用する必要があります。
typeof x == "undefined"
を使うべきです。これは私には馬鹿げているように思えます。誰もそんなことはしないでしょうし、もししたなら、その人が書いたコードを決して使わないという十分な理由になるでしょう......?
私は
の一例です。
を誤って設定した人の
undefined
を
null
と仮定することを避ける理由として、このことが挙げられました。
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;
})();
関連
-
[解決済み] JavaScriptで文字列が部分文字列を含むかどうかを確認する方法は?
-
[解決済み] あるJavaScriptファイルを他のJavaScriptファイルにインクルードするにはどうすればよいですか?
-
[解決済み] JavaScriptでメールアドレスを検証するのに最適な方法は何ですか?
-
[解決済み] JavaScriptでタイムスタンプを取得する方法は?
-
[解決済み] とは何ですか! (not not)演算子とは何ですか?
-
[解決済み] JavaScriptで空文字列/未定義文字列/null文字列をチェックするにはどうすればよいですか?
-
[解決済み] JavaScriptでNULL、未定義、空白の変数をチェックする標準的な関数はありますか?
-
[解決済み】JavaScriptで文字列の出現箇所をすべて置換する方法
-
[解決済み] Node.jsでbase64エンコードされた画像をAmazon S3へアップロードする
-
[解決済み] Javascript 空の配列の削減
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】未定義のオブジェクトプロパティを検出する
-
[解決済み】JavaScriptでオブジェクトのプロパティをチェックするための "not in "演算子はありますか?
-
[解決済み] JSのDateからDay名
-
[解決済み] AngularJSのエラーです。Cross Origin リクエストはプロトコルスキーム http, data, chrome-extension, https に対してのみサポートされています。
-
[解決済み] Node.jsでbase64エンコードされた画像をAmazon S3へアップロードする
-
[解決済み] アサインの左側にJavascriptのオブジェクトブラケット表記({ ナビゲーション } =)があります。
-
[解決済み] JavaScriptで文字列を数値に変換する最速の方法は何ですか?
-
[解決済み] Javascript / jQueryでAndroid端末を検出する。
-
[解決済み] BlobからArrayBufferへ移行する方法
-
[解決済み] querySelectorAllがない場合、ライブラリを使用せずに属性で要素を取得する?