質問: **あるコードで、フォームで受け取った数値を(数値にする目的でだと思うのですが)、evalしている箇所があるのですが、** ``` eval(フォームで受け取った数値); ``` --- **質問1** ・フォームで受け取った数値は必ず文字列になるのでしょうか? --- **質問2** ・仮にフォームで受け取った数値でなかった場合、数値にする目的で文字列をevalしても良いでしょうか? ``` typeof '100'; //"string" typeof eval('100'); //"number" ``` **質問3** ・下記はどういう意味でしょうか? > > 算術式を評価する目的で eval() を呼び出してはいけません。JavaScript は算術式を自動的に評価します > > > 日本語 > > Do not call eval() to evaluate an arithmetic expression; JavaScript evaluates arithmetic expressions automatically. > > > 英語
回答: > > フォームで受け取った数値をeval()、質問3に関して > > > そんなコード使わないほうが良いでしょう。 eval()というのは**引数に渡した値をJavaScriptコードとして動的に実行します**。 つまるところ、コードを書けば、それが実行できるということです。 もし、悪意のあるコードを記述すれば、(eval()した後にその値をどのように処理するかにもよりますが、処理によっては)重大なXSS脆弱性を生むことにもなります。 参考リンク MDN eval() input要素などに入力された値に対してJavaScriptで処理を行いたい場合はvalueを取得して...という方法で可能ですので、わざわざeval()する必要性は皆無です。 > > 質問2に関して > > > JavaScriptのデータ型の書式について少し誤解があるのかもしれません。 ``` '1' //クォーテーションで囲むと文字列です 1 //数値は何も囲いません ``` 受け取った値に対して型変換したい場合は、それぞれ専用のメソッドがあります。eval()ではなくそれらを利用しましょう。 また、受け取った値が必ず文字列か?と言われると、同じように取得にどのような処理をしているかによって変わってきます。(ただ、型変換等は基本としてやるかな...?と思います。) この辺りも一緒に確認されてみてはいかがでしょう? * データ型 (JavaScript) * 型変換のいろいろ