2

これら 2 つの割り当ての違いは何ですか?

var foo = {};
foo['bar'] = "some value";
foo.baz = "some other value";

console.log(foo.bar)
=> "some value"
console.log(foo.baz)
=> "some other value"

それらは同義ですか?有効なプロパティ名ではない [] 構文を使用してキーを追加できることに気付きました。

foo['a space'] = "does not work";
console.log(foo.a space);
=> SyntaxError: Unexpected identifier

質問する理由は、疑似名前空間用の小さな JS ライブラリを作成したからです。上記の割り当てが同一であることを前提に書かれています ([] 構文を使用するときに許可されるスーパーセットは無視されます)。

4

5 に答える 5

7

foo["bar"]と同等ですがfoo.barfoo.bar私の意見では読みやすいです。以前の構文 ( foo["bar"]) では、有効な識別子ではないプロパティ名を使用できます。また、動的なプロパティ名を使用することもできます:

var name = "bar";

foo[name] = 1;

console.log(foo["bar"]);

を出力します1

于 2013-07-05T23:19:31.187 に答える
2

を使用する場合.、プロパティ名はリテラル識別子です。これをプログラムで使用する場合、プロパティ名をハードコーディングする必要があります。

を使用する場合[]、プロパティ名は評価される式です。通常、引用符で囲まれた単純な文字列では使用されません。これ.が表記の目的だからです。ただし、プロパティを計算する必要がある場合に役立ちます。

console.log(foo["item"+i]);

この後者の表記法は、識別子ではないプロパティにアクセスする唯一の方法でもあります。このように、プロパティ名として任意の文字列を使用できます。

于 2013-07-05T23:19:10.673 に答える
2

たとえば、 [] 構文を使用するとより多くの可能性が得られることを除いて、これらは完全に同等です。

var bar = 'text';
foo[bar] = 'baz';
于 2013-07-05T23:19:46.723 に答える
1

これらは同等ですが、attribute-name にスペース (またはその他の英数字以外の文字) が含まれている場合はドット表記を使用できません。

foo.a space // doesn't work
foo['a space'] // does
于 2013-07-05T23:21:15.497 に答える