以下のJavaScriptですが
var a = {hoge:'aa', b:'bb'}; var prop = 'hoge'; eval('console.log(a.'+prop+')');
結果はaa
です。
しかし
console.log(a.'+prop+');
はエラーになります。
eval('console.log(a.'+prop+')');
の中のeval関数
の引数内のJavaScriptをそのまま書いただけなのにエラーになるのは意味がわかりませんでしたが、これはどうしてでしょうか。
また、eval
を用いずに純粋なconsole.log
と変数prop
を用いて変数aのプロパティhoge
の値を表示するにはどうしたらいいでしょうか(console.log(a[prop]);
と書けば正常に表示できますが、evalで行ったように+演算子
を用いて表現することはできないのでしょうか)
(補足)eval('console.log(a.'+prop+')');
の中のpropの直前と直後の2つの+演算子
の使い方が理解ができず(特に直後のプラスはわかりません)、調べても算術計算や文字列の連結でしか使っていないようなのですが、今回の+演算子
はどのような構文・文法なのでしょうか。
上記のeval関数
ではシングルクウォート内に使っていますし、シングルクウォート内はJavaScriptとして解釈されるとしても+演算子
の直前にピリオドがあるとピリオドの直後はプロパティを指定するのではないかとか、propの後の+演算子
の後には何もないですし、文法的にどうなっているのでしょうか。
また、eval
の処理過程で文字列が全てJavaScriptとして解釈されるのなら、そのJavaScriptをevalを使わずに書いても正常に実行されるのでは?と思ったのですがどうしてevalを外して、文字列にしているシングルクウォートも外してもうまくいかないのでしょうか。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/09/21 02:46
2019/09/21 02:47
2019/09/22 02:47