1

「RTFM」または私が訪れたたくさんのリンクを使ってすぐに投稿する前に、私は文書化された予約変数名を使用しないことを十分に認識しています。

私が見つけることができる最高のリストはここにあります:

http://es5.github.com/x7.html#x7.6.1.1 および http://www.javascripter.net/faq/reserved.htm

私が求めているのは、1つまたは2つのブラウザーでのみ無効な変数名です。

たとえば、定義することはできますprintが、printがグローバルスコープですでに定義されているため、エラーが発生しますwindow。これが予約キーワードとして文書化されていないのはなぜですか?

避けるべき変数名の大きなリストはありますか?

4

2 に答える 2

2

私が求めているのは、1 つまたは 2 つのブラウザーでのみ無効な変数名です。

そのような単語が存在する場合、そのブラウザは ECMA-262 に準拠していません。ECMA-262 の予約語のみが「無効な変数名」です (名前が許可された文字などの変数名の基準に準拠している場合)。

[print] が予備のキーワードとして文書化されていないのはなぜですか?

予約語は、予約語の概念を持つ標準によってのみ定義できます。その概念を持つブラウザーでの DOM のスクリプト作成に関連する唯一の標準は、ECMA-262 です。また、 printは予約語としてリストされていないため、予約語ではありません。

ホスト オブジェクトとそのプロパティを定義するさまざまな DOM 標準がありますが、予約語の概念に最も近いのは、読み取り専用プロパティ、または書き込み不可のプロパティです。window.printは HTML5 で定義されていますが、書き込み可能ではない、または割り当てられた場合や変更が試みられた場合にエラーをスローする必要があるとは定義されていません。そのため、予約語に近い動作を示すことはありません。

避けるべき変数名の大きなリストはありますか?

いいえ、ないからです。ただし、ホスト オブジェクト ( windowなど) には、書き込み可能な既定のプロパティがあるため、それらを上書きしないようにする必要があります。HTML5 仕様やブラウザー ベンダーのドキュメントなど、さまざまな場所にリストする必要があります。

たとえば、windowオブジェクトの次のリンク:

  1. W3C HTML5 ウィンドウ オブジェクト: http://www.w3.org/TR/html5/browsers.html#the-window-object
  2. MDN ウィンドウ オブジェクト: https://developer.mozilla.org/en/DOM/window
  3. MSDN ウィンドウ オブジェクト: http://msdn.microsoft.com/en-us/library/ms535873(v=vs.85).aspx

さらに、特定の時点で列挙可能なプロパティを検出するための単純な for..in ループ (Berji の回答による) があります。区別のないプロパティ。

可能性のあるプロパティ名を避け、グローバル変数 (つまり、ウィンドウ オブジェクトのユーザー定義プロパティ) の使用を最小限に抑える命名規則を採用する方が良い戦略です。

于 2012-06-07T12:43:02.687 に答える
1

予約済みキーワードの公式リストを拡張するためにブラウザー定義変数の大きなリストが必要な場合は、コンソールの空のページ (about:blank) に次のように入力します。

>>> Object.getOwnPropertyNames(window)
>>> Object.getOwnPropertyNames(Object.getPrototypeOf(window)) // sometimes not Object

これにより、絶対に使用すべきではない文字列の配列が生成されます。も含まれ"print"ます。

Windowただし、インターフェイスを使用するクールな HTML5 ドラフトのすべてを実装していないものもあるため、ブラウザーに依存することになります。"Worker"たとえば、IE9 や"openDatabase"FF などでは見つかりません。また、 のような従来のプロパティを一覧表示しない"onload"場合がありますが、そのプロパティ記述子 (および ) を取得することはできます"onload" in window === true

于 2012-06-07T23:57:23.223 に答える