2016-05-05 1 views
2

は、我々は次のコードを持っていると仮定しましょう:Javascriptで変数の名前を取得するにはどうすればいいですか(C#のnameof演算子など)?

const myVariable = { age: 7, name: "Hunter" }; 

私は変数ではなく、それだけの価値の名前を知っている...と、文字列にそれを置くか、またはそれを記録したいですか...。

const s = nameof(myVariable) + ': ' + JSON.stringify(myVariable); 

そして、私が見たいと思った結果は次のようにかなっている:

あなたのソリューションを見ることを楽しみにして
"myVariable: {"age":7,"name":"Hunter"}" 

答えて

0

これはQの私自身の答えです&少しの妥協を伴うスタイル。ここでは、オブジェクトの中の関数名にパラメータを渡すには、nameof(myVariable)ではなくnameof({myVariable})のように中括弧で囲んでください。

この大会に続いて、解決策は次のようになります。

var HD = HD || {}; 
HD.nameof = function (obj) { 
    return Object.keys(obj)[0]; 
} 

そして、これは私は、変数/オブジェクトプラスオブジェクトの内容/変数の値の名前を得るためにそれを使用する方法である:

const s = HD.nameof({myVariable}) + ': ' + JSON.stringify(myVariable); 

したがって、上記の質問で要求された結果が含まれます。

+0

これはES6でのみ動作し、 '{x}'は '{x:x} 'のショートカットであることに注意してください。しかし、現時点では、あなたはすでに変数の名前を知っているので、私はその点を見ません!あなたは 'const s =" myVariable: "+ JSON.stringify(myVariable)と書くことができます。ポイントは? JavaScriptがプリプロセッサを持っていて、C++の '#'プリプロセッサプリフィックスのようなものを探していたのですが、それはありませんでした...(もしデバッグ出力の場合は 'JSON.stringify '{" myVariable ":{" age ":" name ":" hunter "}}')... – CherryDT

+0

は 'Object.keys({myVariable})'ではありません。 (myVariable)[0]; 'あなたのメソッドと同じくらい簡単で、何がやっているのかははっきりしていますか? – Liam

+0

@Liam:いいえ、トリックは中括弧と[ES6のプロパティの短縮形](http://es6-features.org/#PropertyShorthand)にあります。基本的には、彼は '' my.variable '(myVariable:myVariable) '、つまり' 'myVariable' 'である' 'Object.keys({myVariable:myVariable})[0]'を実行しています。 – CherryDT

関連する問題