var test = "test123"
var test123 ={
"key" + test: 123
}
このコードは機能しません。 「キー」+テストの何が問題になっていますか?
"key" + test
は式であり、識別子でも文字列リテラルでも数値リテラルでもないため、オブジェクトリテラルのキーとして許可されている唯一のものです。
このような動的キーのオブジェクトを作成した後、[]
表記を使用する必要があります。
var test123 = {};
test123["key" + test] = 123;
識別子は基本的に変数を呼び出すことができる文字のサブセットと同じです(文字、数字、_
および$
。数字で始まることはできません)。文字列リテラルは'
または"
で囲まれた任意の文字列です。
したがって、オブジェクトリテラルで使用できるキーの種類は次のとおりです。
{
a0: true, // valid identifier
$$_: true, // same
123: true, // valid numeric literal
012: true, // same (octal)
0xf: true, // same (hex)
"@": true, // not allowed as an identifier
'0a': true // same
}
参照: http://es5.github.com/#x11.1.5 。
PropertyName:
IdentifierName
StringLiteral
NumericLiteral
ES6では、オブジェクトリテラル内で動的キーを定義できます。
const test = "test123"
const test123 = { [`key${test}`]: 123 }; //{ keytest123: 123 }
リテラル表記ではできますが、できません(ES6より前)。
var test123 = {};
test123["foo" + "bar"] = 'baz';
test123.foobar === 'baz'; // true
コードはtest123.("key" + test) = 123
と同等です。これは、なぜ間違っているのかを理解するのに役立ちます。
文字列の名前でフィールドにアクセスするには、["name"]
表記が必要です。他の表記法(あなたのものと.
one)は識別子が必要です。
Javascriptは、オブジェクトのプロパティを定義する2つの方法を提供します。
この状況では、propertyNameは編集できず、計算できません。次のことはできません。
object.('property'+'Name')
ご覧のように
object = {propertyName:value};
object = {'propertyName':value};
彼らは等しい
できるよ :
var a = "propertyName";
object[a] = value;
今回は文字列を使用する必要があります
object[propertyName] = value;//error
object["propertyName"] = value;//correct
object = {'propertyName':value};//correct
object = {propertyName:value};//correct