15

JavaScriptは、オブジェクトを宣言するための多くの方法を提供します。ほとんどのデータが手元にある場合、(私の意見では)最も便利なのは次のとおりです。

var person = {
    name: 'John',
    age: 23
}; // "object literal syntax"

この構文の興味深い点は、これと同じであるということです。

var person = {
    'name': 'John',
    'age': 23
}; // "object literal syntax"

つまり、プロパティ名に引用符を使用するか、引用符を省略することができます。

これを単一のプロパティの設定方法と比較すると、次の2つのオプションがあります。

person.birthday = "January 12"; // "dot syntax"

また

person['birthday'] = "January 12"; // "array syntax"

「ドット構文」は、右のオペランドが実際のプロパティ名である場合にのみ機能します。プロパティ名に変数を使用する場合は、「配列構文」を使用する必要があります。つまり、次のようになります。

var prop = "birthday";
person[prop] = "January 12";

さて、「オブジェクトリテラル構文」のプロパティ名に変数を使用することは可能ですか?プロパティ名を引用するかどうかは問題ではないため、そこで変数を使用する明確な方法はないようです。私はこのようなものを探しています:

var prop = "birthday";
var person = {
    name: 'John',
    age: 23,
    (prop): 'January 12'
};

ここでは、これがリテラル文字列ではなく変数であることを表現するために使用される架空の構文として(prop)を使用しています。

ありがとう。

4

4 に答える 4

7

いいえ、これは機能しません。そのため、プロパティ名を動的に設定する場合は、表記法のような配列が提案され、使用されます。

var k='propertyname';
object[k]="value";

これは、ドット表記を使用して変数からインデックスまたはプロパティ名を設定することはできませんが、機能します。

于 2012-09-26T18:14:18.487 に答える
5

ES6はこれを可能にします:

var obj = {
  [prop]: 'value'
};
于 2016-01-14T07:46:46.947 に答える
4

キーが文字列ではなくオブジェクトであるドット構文のドロップイン置換が必要な場合(たとえば、親オブジェクト内にネストする場合)、いくつかの回避策があります。

var developers = {
    person: {
        'name': 'John',
        'age': 23
    },
    anarchist: (function(){ var a = {};
        a['name'] = 'John';
        a['age'] = 23;
        a[false] = false;
        a[1] = 1;
        a[window] = window;
    return a; })(),
    conformist: _.object([
        ['name', 'John'],
        ['age', 23],
        [false, false],
        [1, 1],
        [window, window]
    ])
};

// console.log(developers); // <- to see var dump in Firebug

anarchist要素は、呼び出し後にガベージコレクションを取得する自己実行関数を使用し、conformist要素は、サイトにunderscore.jsを含めることができる場合は、_。object()関数を使用します。

組み込みのObject()関数とArray()関数で、underscore.jsと同じようにキーと値を渡すことができるようにしたいと思います:-)

于 2013-01-24T21:16:47.370 に答える
2

オブジェクトではこれを行うことはできませんが、代わりにコンストラクター関数を使用することを検討すると、次のようになります。

var prop = "birthday";
var Person = function() {
    this.name = "Bob";
    this[prop] = "January 12";
};
var bob = new Person();

もちろん、ここにはまだ配列表記がありますが、とにかくこのアプローチが好きかもしれません:)

于 2012-09-26T18:24:08.190 に答える