「JavaScript/Global」の版間の差分

削除された内容 追加された内容
4 行
 
文字列を評価してその結果を返す。
 
eval関数の意味は、この一言で解説可能な単一の関数であるが、実際には様々な役割があり非常に重要なのでさらに解説を行う。
 
eval関数は文字列をJavaScriptであるとして評価して、その結果を返す。
そのため
 
<nowiki>
var v=eval('100'); // 数字型の100をvに代入 </nowiki>
 
などとすると、その結果が返ってくる。
このことから、何らかのユーザーの入力があったときに、その結果をJavaScriptで扱うことができる状態に変換可能である。
例えば、次のコードはHTMLで作成した、選択ボックスの結果を、evalでJavaScriptに変換した結果を逐次代入している。
<nowiki>
<form id="enquete">
<select id="yes-no">
<option value="true" selected="selected">はい</option>
<option value="false">いいえ</option>
</select>
</form>
<script>
var ret = true;
document.getElementById('yes-no').onchange=function(e){
ret = eval(this[this.selectedIndex].value);
}
</script> </nowiki>
 
ただし入力紹介する結果が数値である場合は、後で紹介するparseIntやparseFloatの方が安全である。
 
さらに一歩推し進めて考えると、次の様に、計算式等もeval関数は処理をして、変数を呼び出す事も出来る。
<nowiki>
document.write( eval('100+100'), '<br />' ); // 200を表示
var s='Hello';
eval('s +=",Workd!"');
document.write( s, '<br />' ); // Hello,World!を表示 </nowiki>
 
ちなみにevalで呼び出せる変数の値は、グローバル変数(何処の関数のスコープにも属していない変数)で無ければならないのを知っておくべきである。
 
ここまでを知っていると、eval関数はまた新たな使い道を考えることが出来る。
外部から取り出したテキストを評価して、データとして取り出す手法である。
<nowiki>
var s = '{ "住所":"東京都", "年齢":28, "性別":"男" }'; // 仮に外部から取り出したとしたデータ
var o = eval('('+s+')'); // データを評価してJavaScriptデータに変換
document.write( o['年齢'] ); </nowiki>
 
Webページ等で、外部と通信しながら、その結果を動的反映していくAjaxという手法では、この手法を使って主にデータの取り出しを行っている。
この様に、JavaScriptのデータ形式を文字列化して、データのフォーマットして使われ出している。
この形式をJSON(JavaScript Object Notation)と言う。
 
近年の流れとして、一部のJavascript使用環境では、このJSON形式のデータを設定ファイルの保存形式等として使う流れも存在している。
その際の拡張子としては、.txtや.js等も使われたが、ゆっくりと.jsonを出来るだけ使うのが主流になりつつある。
 
* [[w:JavaScript Object Notation|JavaScript Object Notation]]
 
これらの処理に、共有しているのはeval関数というのはJavaScriptでの入力結果を何の疑問も持たず処理するため、強力ではあるが非常に危険でもあることである。
 
=== 数値処理関数 ===