Js オブジェクトのプロパティへのアクセス:
違いは何ですか :
1) Obj.src
vs
2) Obj["src"]
#1 は数値と一緒に使用できないことだけを知っています (たとえば、プロパティ名が「1」の場合)
他に大きな違いはありますか?
Js オブジェクトのプロパティへのアクセス:
違いは何ですか :
1) Obj.src
vs
2) Obj["src"]
#1 は数値と一緒に使用できないことだけを知っています (たとえば、プロパティ名が「1」の場合)
他に大きな違いはありますか?
本当に違いはありません。古いブラウザでは、どちらか一方の表記を使用してパフォーマンスの違いが見られましたが、その時代は終わりました。
唯一の重要な違いは、ブラケット表記がオブジェクト プロパティに動的にアクセスする唯一の機会であることです。
例えば:
var access = 'src';
Obj[ access ];
ドット表記を使用してそれを行うことはできません。
ブラケット表記でアクセスできるプロパティのセットは、ドット表記でアクセスできるプロパティのスーパーセットです。ドットでアクセスするものはすべて、有効な JavaScript 識別子でなければなりません:
アンダースコア ("_") とドル記号 ("$") を含む一連の英数字。数字で始めることはできません。
プロパティは引き続き識別子ではない文字列にすることができますが、アクセスにはブラケット表記が必要です。
object["I have whitespace"];
object["1startswithanumber"];
object["Punctuation!!??"];
object[""] = "empty string";
// not an exhaustive list
ES5 では予約語をプロパティとして使用できますが、これは ES3 では許可されていないため、下位互換性のためにブラケットを使用する必要がありx.class = "some string"
ます。x["class"]
ブラケット表記を使用して有効な識別子プロパティにアクセスすることはできますが、ドット表記はよりクリーンであると見なされます。角かっこは通常、変数がある場合に使用されます。
object[input.value]; //Retrieves the property named by the value of the input field
関数には括弧を使用してアクセスすることもできます:
var fn = operation == "tag" ? "getElementsByTagName":"getElementsByClassName";
document[fn](str);
JavaScript では、すべてのオブジェクトは連想配列です。
JavaScriptの優れた魔法の機能の1 つ以外に、これ以上追加することは考えられません。:)
Obj.src
と の間に違いはありませんObj["src"]
。
しかし、プロパティ名が変数の場合は、2 番目の方法でしかアクセスできませんでした。
var name = "src";
Obj[name]
次に、を使用する必要がありObj.name
、 の名前でプロパティにアクセスしようとしますname
。