3

次の JS コードを見てください。

alert(myImgId.src);

および対応する HTML:

<img id="myImgId" src="http://images4.wikia.nocookie.net/__cb20121128141533/logopedia/images/6/6f/Superman_logo.png"></img>

myImgId私が期待すること: variableが見つからないことを指定する JavaScriptsrcエラーmyImgId

実際に何が起こるか: 最新のブラウザー (FF 17 以降、クロム) は、指定された ID を持つ DOM 要素を自動的に取得します。FF 10 などの古いバージョンのブラウザーは、予想どおりエラーをスローします。

ここで何が起こっているのか誰か説明できますか?

JSFミドルリンク

4

2 に答える 2

2

私はこれを別のSOの質問から収集しました。質問は実際にはあなたの質問と同じではありませんが、答えはあなたの質問に答えます:

ID を変数名として使用できますか?

ここに良いものがあります:(すべてシドニシャスの回答から引用)

グローバル変数を自動的に作成することは悪い習慣と見なされます。これは、一部のコードを見て、それが意図的なものなのか、どこかで変数を宣言するのを忘れたのかを判断するのが難しい場合があるためです。このようなグローバル変数の自動作成は ES5 の厳密モードでは機能せず、ECMAScript の将来のバージョンでは段階的に廃止される可能性があります。

ブラウザでは、JavaScript のグローバル スコープは実際にはウィンドウです。ドキュメントを参照すると、window.document が取得されます。ブラウザーでグローバル変数を作成するためのベスト プラクティスは、window (Node.js ではグローバル) に追加することです。

...ほとんどのブラウザーは、ドキュメント内の ID ごとにウィンドウ (したがってグローバル変数) にプロパティを作成することがわかりました。多くのブラウザは読み取り専用にせず、独自のブラウザで上書きできますが、Internet Explorer は上書きできます。

これは、JavaScript のグローバル変数が危険であるもう 1 つの理由です。ID の 1 つが読み取り専用のウィンドウ プロパティと一致する可能性があります (現在または将来のブラウザーで)。

于 2013-10-16T18:05:50.467 に答える