「JavaScript/Global」の版間の差分

削除された内容 追加された内容
syntaxhighlight
Ef3 (トーク | 投稿記録)
タグ: 2017年版ソースエディター
26 行
そのため
 
: <syntaxhighlight lang="javascript">
const str = "100";
const v = eval(str); // 数値100が、変数 v に代入される
34 行
このことから、何らかのユーザーの入力があったときに、その結果をJavaScriptで扱える状態に変換可能である。
例えば、次のコードはHTMLで作成した、選択ボックスの結果を、evalでJavaScriptに変換した結果を逐次代入している。
: <syntaxhighlight lang="html5">
<form id="enquete">
<select id="yes-no">
53 行
 
さらに一歩推し進めて考えると、次の様に計算式等もeval関数は処理をして変数を参照できる。
: <syntaxhighlight lang="javascript">
console.log( eval('100+100') ); // 200を表示
var s='Hello';
63 行
ここまでを知っていると、eval関数はまた新たな使い道を考えることが出来る。
外部から取り出したテキストを評価して、データとして取り出す手法である。
: <syntaxhighlight lang="javascript">
var s = '{ "住所":"東京都", "年齢":28, "性別":"男" }'; // 仮に外部から取り出したとしたデータ
var o = eval('('+s+')'); // データを評価してJavaScriptデータに変換
71 行
Webページ等で外部と通信しながら、その結果を動的反映していく[[w:Ajax|Ajax]]という手法では、この手法を使って主にデータの取り出しを行っています。
この様に、JavaScriptのデータ形式を文字列化([[w:シリアライズ#直列化|シリアライズ]])して、データのフォーマットとして使われ出している。
この形式を[[JSON]](JavaScript Object Notation)と言う。
 
実際には、コントロールされていない外部から文字列を受け取る場合には正しいJSONフォーマットではなく評価に失敗することがありうるため、エラーチェックのためにtry~catch文で囲う。
 
: <syntaxhighlight lang="javascript">
var o;
try {
89 行
{{コラム|JSONオブジェクト|
JSONフォーマットの文字列をeval関数で評価することで不正なコードを実行してしまう危険を侵さぬよう、[[JavaScript/JSON|JSON オブジェクト]] がJavaScriptに加わり JSON.parse() でJSON(であろう)文字列からJavaScriptのオブジェクトを JSON.stringify() でJavaScriptのオブジェクトからJSONフォーマットの文字列をそれぞれ得ることが出来るよになりました。
: <syntaxhighlight lang="js">
const str = JSON.stringify({ "住所":"東京都", "年齢":28, "性別":"男" });
console.log(str); // "{\"住所\":\"東京都\",\"年齢\":28,\"性別\":\"男\"}"
105 行
規格上、第2引数は省略した場合 0x で始まる16進法表記以外は10進法とみなして自動で変換を行っています。
Number.parseInt()の別名。
: <syntaxhighlight lang="javascript">
console.log( parseInt('10') ); // 10を表示
console.log( parseInt('10', 8 ) ); // 8を表示; 8進法として解釈、
120 行
与えられた文字列を、JavaScriptのNumber型のオブジェクトに変換します。
Number.parseFloat() の別名。
: <syntaxhighlight lang="javascript">
console.log( parseFloat('10') ); // 10が表示
console.log( parseFloat('10.00') ); // 10が表示
139 行
引数の値がNaN(Not-a-Number)であればtrueを、それ以外はfalseを表示。
Number.isNaN() とは動作が異なる。
: <syntaxhighlight lang="javascript">
console.log( isNaN(NaN) ); // trueを表示
console.log( isNaN(Math.sqrt(-1)) ); // trueを表示
152 行
正あるいは負の Infinity か NaN か undefined の時 false を返し、それ以外は true を表示。
Number.isFinite() とは動作が異なる。
: <syntaxhighlight lang="javascript">
console.log( isFinite(Infinity) ); // falseを表示
console.log( isFinite(100) ); // trueを表示
177 行
実際に先ほどのURLをそれぞれの関数で変換してみる。
 
: <syntaxhighlight lang="javascript">
console.log( 'http://ja.wikipedia.org/wiki/ネットスケープコミュニケーションズ' );
console.log( encodeURI('http://ja.wikipedia.org/wiki/ネットスケープコミュニケーションズ') );
184 行
実行結果は次の様に表示された。
 
: <syntaxhighlight lang="javascript">
http://ja.wikipedia.org/wiki/ネットスケープコミュニケーションズ
http://ja.wikipedia.org/wiki/%E3%83%8D%E3%83%83%E3%83%88%E3%82%B9%E3%82%B1%E3%83%BC%E3%83%97%E3%82%B3%E3%83%9F%E3%83%A5%E3%83%8B%E3%82%B1%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3%E3%82%BA
311 行
==== encodeURI(uri) ====
URL(URI)として有効な範囲で、文字列をURLエンコードします。
: <syntaxhighlight lang="javascript">
// 変換して「JavaScript%E6%A8%99%E6%BA%96%E3%83%A9%E3%82%A4%E3%83%96%E3%83%A9%E3%83%AA」
encodeURI('JavaScript標準ライブラリ');</syntaxhighlight>
317 行
==== encodeURIComponent(uriComponent) ====
文字列をURLエンコードします。
: <syntaxhighlight lang="javascript">
// 変換して「JavaScript%E6%A8%99%E6%BA%96%E3%83%A9%E3%82%A4%E3%83%96%E3%83%A9%E3%83%AA」
encodeURIComponent('JavaScript標準ライブラリ'); </syntaxhighlight>
323 行
==== decodeURI(encodedURI) ====
encodeURIで行った変換を元に戻す。
: <syntaxhighlight lang="javascript">
// 「JavaScript標準ライブラリ」に戻す
encodeURI('JavaScript%E6%A8%99%E6%BA%96%E3%83%A9%E3%82%A4%E3%83%96%E3%83%A9%E3%83%AA');</syntaxhighlight>
329 行
==== decodeURIComponent(encodedURIComponent) ====
encodeURIComponentで行った変換を元に戻す
: <syntaxhighlight lang="javascript">
// 「JavaScript標準ライブラリ」に戻す
encodeURI('JavaScript%E6%A8%99%E6%BA%96%E3%83%A9%E3%82%A4%E3%83%96%E3%83%A9%E3%83%AA');</syntaxhighlight>