「JavaScript/Global」の版間の差分
削除された内容 追加された内容
M U14269 がページ「JavaScript/標準ライブラリ/Global」を「JavaScript/Global」に移動しました |
→eval(x): {{コラム|JSONオブジェクト}} |
||
10 行
そのため
<syntaxhighlight lang="javascript">
var v=eval('100'); // 数字型の100をvに代入
</syntaxhighlight>
などとすると、その結果が返ってくる。
このことから、何らかのユーザーの入力があったときに、その結果をJavaScriptで扱うことができる状態に変換可能である。
例えば、次のコードはHTMLで作成した、選択ボックスの結果を、evalでJavaScriptに変換した結果を逐次代入している。
<syntaxhighlight lang="html5">
<form id="enquete">
<select id="yes-no">
28 ⟶ 29行目:
ret = eval(this[this.selectedIndex].value);
}
</script
</syntaxhighlight>
(ただし入力紹介する結果が数値である場合は、後で紹介するparseIntやparseFloatの方が安全である)
さらに一歩推し進めて考えると、次の様に、計算式等もeval関数は処理をして、変数を呼び出す事も出来る。
<syntaxhighlight lang="javascript">
document.write( eval('100+100'), '<br />' ); // 200を表示
var s='Hello';
eval('s +=",World!"');
document.write( s, '<br />' ); // Hello,World!を表示
</syntaxhighlight>
ちなみにevalで呼び出せる変数の値は、グローバル変数(何処の関数のスコープにも属していない変数; 実体はグローバルオブジェクトのプロパティ)で無ければならないのを知っておくべきである。
ここまでを知っていると、eval関数はまた新たな使い道を考えることが出来る。
外部から取り出したテキストを評価して、データとして取り出す手法である。
<syntaxhighlight lang="javascript">
var s = '{ "住所":"東京都", "年齢":28, "性別":"男" }'; // 仮に外部から取り出したとしたデータ
var o = eval('('+s+')'); // データを評価してJavaScriptデータに変換
document.write( o['年齢'] );
</syntaxhighlight>
Webページ等で、外部と通信しながら、その結果を動的反映していく[[w:Ajax|Ajax]]という手法では、この手法を使って主にデータの取り出しを行っている。
この様に、JavaScriptのデータ形式を文字列化([[w:シリアライズ#直列化|シリアライズ]])して、データのフォーマットとして使われ出している。
この形式をJSON(JavaScript Object Notation)と言う。
実際には、コントロールされていない外部から文字列を受け取る場合には正しいJSON
<syntaxhighlight lang="javascript">
var o;
try{
o = eval('('+s+')');
} catch(e){
// エラー処理
}
</syntaxhighlight>
近年の流れとして、一部の
その際の拡張子としては、
* [[w:JavaScript Object Notation|JavaScript Object Notation]]
{{コラム|JSONオブジェクト|
JSONフォーマットの文字列をeval関数で評価することで不正なコードを実行してしまう危険を侵さぬよう、[[JavaScript/JSON|JSON オブジェクト]] がJavaScriptに加わり、JSON.parse() でJSON(であろう)文字列からJavaScriptのオブジェクトを、JSON.stringify() でJavaScriptのオブジェクトからJSONフォーマットの文字列をそれぞれ得ることが出来るよになりました。
}}
=== 数値処理関数 ===
|