「JavaScript/Global」の版間の差分

削除された内容 追加された内容
3 行
=== eval(x) ===
 
文字列を評価してその結果を返す。
=== parseInt(string , radix) ===
 
=== 数値処理関数 ===
 
==== parseInt(string , radix) ====
与えられた文字列を、先頭から解釈して整数に変換する。第2引数では、何進法とみなして変換を行うのかを指定する。
規格上、第2引数は必要なもののはずだが、どの実装でも省略した場合10進法とみなして自動で変換を行っている。
11 ⟶ 15行目:
document.write( parseInt('0x10') ); // 0xで始まる場合は16進数として、解釈。16を返す</nowiki>
 
==== parseFloat(string) ====
与えられた文字列を、JavaScriptのNumber型のオブジェクトに変換する。
<nowiki>
20 ⟶ 24行目:
document.write( parseFloat('10E-3') ); // 0.01が表示される</nowiki>
 
==== isNaN(number) ====
引数の値がNaN(Not-a-Number)であればtrueを、それ以外はfalseを返す。
<nowiki>
document.write( isNaN(NaN) ); // trueが表示
document.write( isNaN(Math.sqrt(-1)) ); // trueが表示
document.write( isNaN(Math.sqrt( Infinity/Infinity )) ); // trueが表示</nowiki>
 
==== isFinite(number) ====
引数の値が±∞のいずれかであればfalseを、そうでない場合はtrueを返す。
これは、通常の判別とtrueとfalseの結果が逆であるのに注意をする。
<nowiki>
document.write( isFinite(Infinity) ); // falseが表示
document.write( isFinite(100) ); // trueが表示 </nowiki>
 
=== URLエンコード関連関数 ===
例えば次の様なリンクが存在したとしよう
 
http://ja.wikipedia.org/wiki/ネットスケープコミュニケーションズ
 
このリンクは日本語文字列を含んでいるため、実際にはURLとして利用できない。
そのため、これを英語と記号のASCII文字列の範囲の文字列で一度変換を行う必要がある。
これがURLエンコードと呼ばれる技術である。
(ただしこれは古い話で、現在はURLとして必要な文字列は多言語に対応している)
 
*[[w:URLエンコード|URLエンコード]]
 
どの文字コードを基準とのするかは、実装によるがJavaScriptは文字列がUTF8と考えて処理を行う。
 
実際にURLエンコードを行う関数にはencodeURIとencodeURIComponentの2つがあるが、これらは微妙に実装が違う。
実際に先ほどのURLをそれぞれの関数で変換してみる。
 
<nowiki>
document.write( 'http://ja.wikipedia.org/wiki/ネットスケープコミュニケーションズ' );
document.write( encodeURI('http://ja.wikipedia.org/wiki/ネットスケープコミュニケーションズ') );
document.write( encodeURIComponent('http://ja.wikipedia.org/wiki/ネットスケープコミュニケーションズ') );</nowiki>
 
実行結果は次の様に表示された。
 
<nowiki>
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
http%3A%2F%2Fja.wikipedia.org%2Fwiki%2F%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 </nowiki>
 
日本語文字列以外にも、スラッシュ(/)等の一部の文字がencodeURIComponentでは変換されているのが分かる。
これらの変換の結果は次の様な法則が共通している。
* 文字の中でも[0-9][a-z][A-Z]の文字列は変換されない
* 日本語等の非ASCII文字列は基本的に変換される
なので、その外の記号文字列は変換結果の違うものなのでこれらを比較する。
{| class="wikitable"
|- align="left"
|-
! 無変換
! !
! "
! #
! $
! %
! &
! '
! (
! )
! *
! +
! ,
! -
! .
! /
! :
! ;
! &lt;
! =
! &gt;
! ?
! @
! [
! \
! ]
! ^
! _
! `
! {
! |
! }
! ~
|-
! encodeURI
| !
| %22
| #
| $
| %25
| &
| '
| (
| )
| *
| +
| ,
| -
| .
| /
| :
| ;
| %3C
| =
| %3E
| ?
| @
| %5B
| %5C
| %5D
| %5E
| _
| %60
| %7B
| %7C
| %7D
| ~
|-
! encodeURIComponent
| !
| %22
| %23
| %24
| %25
| %26
| '
| (
| )
| *
| %2B
| %2C
| -
| .
| %2F
| %3A
| %3B
| %3C
| %3D
| %3E
| %3F
| %40
| %5B
| %5C
| %5D
| %5E
| _
| %60
| %7B
| %7C
| %7D
| ~
|}
 
少し図が見づらいかもしれないが、結果は一定の傾向があることが分かる。
encodeURIComponentで変換をされないが、encodeURIで変換を行われる文字は、「#」、「/」、「&」、「:」、「;」等、URLで使用したり、CGIでパラメータを指定するときに特別な意味があるものである。
 
なので、これらの使い分けは次の様に分けるのが一つの基準となる。
* URLを変換するときはencodeURI
* データをcookieや外部のテキストとして出力するとき、CGIで入力された文字の安全な変換等はencodeURIComponent
 
このように変換した文字は、encodeURI、encodeURIComponentに対応するdecodeURI、decodeURIComponentという関数で元の文字列に戻すことができる。
=== isFinite(number) ===
引数の値が±∞のいずれかであればtrueを、そうでない場合はfalseを返す。
 
==== encodeURI(uri) ====
URL(URI)として有効な範囲で、文字列をURLエンコードする。
 
==== encodeURIComponent(uriComponent) ====
文字列をURLエンコードする。
 
==== decodeURI(encodedURI) ====
encodeURIで行った変換を元に戻す。
 
==== decodeURIComponent(encodedURIComponent) ====
encodeURIComponentで行った変換を元に戻す