10

次のことを考慮してください

var a = {foo: "bar"};

に相当

var a = {};
a.foo = "bar";

に相当

var a = {};
a['foo'] = "bar";

に相当

var a = {}
var b = "foo";
a[b] = "bar";

のようなことは可能ですか?

var b = "foo";
var a = { [b]: "bar" };

結果が

// => {foo: "bar"}

許容される解決策は JavaScript または CoffeeScript にあります

4

7 に答える 7

6

いいえ。

オブジェクトリテラル表記を使用してそれを行う方法はありません。


更新: ECMAScript 標準 6.0によれば、次のことができるようになりました。

var b = 'foo';
var a = { [b]: 'bar' };

console.log( a.foo );  // "bar"

ただし、このソリューションは、ES6 をサポートしていない古いブラウザーでは機能しません。

于 2012-12-21T22:02:22.797 に答える
4

いいえ、他の人が言ったように、現在、CoffeeScript のオブジェクト リテラルに挿入されたキー文字列の構文はありません。しかし、ある時点でこの機能が存在していたようです! これらの GitHub の問題には、それに関するいくつかの議論があります: #786および#1731

CocoLiveScriptでは次のように実装されています。

b = 'foo'
a = {"#{b}": 'baz'}

# Or..
a = {(b): 'bar'}
于 2012-12-22T00:24:08.900 に答える
0

JavaScript

var a, b;
(a = {})[b = 'foo'] = 'bar';

コーヒースクリプト

(a = {})[b = 'foo'] = 'bar'
于 2012-12-21T22:03:10.700 に答える