4.1 2 升 : 〃・、 fiddle.netrse ・ m 5 リ var myFunction = function(foo) { / / f00 の位置に渡された引数を操作 arguments[o] - XYZ ; 関数の実行を中断ー 69 ( onsole. 10g ( f00 , arguments[o]); / / f00 と arguments[o] の値が両方とも・ xyz ・ f00 = ・ f00 ' ; / / f00 を直接操作 ( onsole. 10g ( f00 , arguments[o]); / / f00 と arguments[o] の値が両方とも・ f00 ' var 訂 gl = arguments[l]; / / この例では渡されない引数 ; / / 渡されていない場所の引数を編集 arguments[l] ー ' 123 ・ しくは数値以外の値が渡された場合に終了させています。 つでも関数の実行を終了することができます。次の例では、 add 関数に undefined も 関数の実行中に return 文を宣言することにより、戻り値のあるなしに関わらずい 4-12 関数の実行を中断 ます。 しくはパラメータ名の変数を直接編集することによって新しい値を与えることができ myFunction のパラメータに渡された引数を arguments インデックスを使って、も myFunction('abc' ) ; は編集されている console. 10g ( 訂 gl , arguments[l]); / / 渡されていない引数は undefined だが argument[l] console. 10g(add(3, 3 ) ) ; / / 出力 : return X 十 y; return pass in numbers' if (typeof x ! ー・ number ' Ⅱ typeof y ー var add = function(), y) { 社ゾ / ・ s 升 d 引 ne e ・ u ; / / 引数が数値でない場合にメッセージを返して関数を終了 ・ number' ) { 6 て eturn を宣言することにより、関数の実行をいつでも終了させることができます。 console. 10g(add('2' ・ 2 ・ ) ) ; / / 出力 : ・ pass in numbers ・
66 ー 4 章関数 (Function()) JavaScript では関数はオプジェクトであること、つまり「値」であることを認識す ることがとても重要です。他のすべての式と同様に、関数を値として渡したり、プロ パティを追加したりすることができます。 4.7 関数に引数を渡す 関数のパラメータは、関数実行時のスコープに値を渡すための入れ物です。次の例 では、 addFunction() に 2 つのパラメータを設定しているため、この関数の実行時に 2 つの変数が関数のスコープに追加されています。 var addFunction = function(numberl, number2) { var sum = numberl 十 number2; return sum; console. 10g(addFunction(3, 3 ) ) ; / / 出力 : 6 ・他の多くのプログラミング言語とは異なり、 JavaSc 「 ipt では関数にバラメータが設 定されていても常にバラメータと同じ数の引数を渡さなくてもかまいません。ただし、 定義されているバラメータに引数が渡されていない場合、その変数には undefined が設定されます。そのため、関数本体の記述によっては、バラメータで指定された数 の引数を渡さない場合に関数が正常に動作しない可能性があります。 ・定義していないバラメータに引数を渡した場合でも、エラーは起こりません。しかも、 すべての関数でアクセス可能な a て guments オブジェクトを通じてこれらの引数にアク セスすることができます (arguments については 4.8 節で説明します ) 。 NOTE 4.8 this と arguments はすべての関数本体で利用できる this と arguments は、すべての関数本体 ( スコープ内 ) で利用できます。 this はすべての関数に渡され、実行中の関数を保持しているオプジェクトを参照 します 1 ・。オプジェクトにメソッドとして格納されている関数では、 this を使うこと によってその「親」オプジェクトの参照を得ることができます。関数がグローバルス 訳注 this は 6 章で詳細に説明します。 コープで呼び出されている場合は、 this はグローバルオプジェクトになります。次 す
1 1 .2 ・ rsfiddle.net,rse 、 a/B7Wr 〃 new を伴って数値オプジェクトを生成 ( 通常は使用されない ) var number0ne = new Number(456); console. log(number0ne); / / 出力 : ・ 456 { } ・ 〃この場合、 typeof 演算子は object を出力するので注意 console. log(typeof number0ne); / / 出力・ 0bject / / プリミティフ型の数値を生成、もしくは様々な値を数値に変換 〃数値は数値のまま console. 10g(Number(1), Number(1.1), Number(-10), Number()x 幵 )); / / 出力 / / 数値文字列は数値に変換される 整数と小数 ・ 1 1.1 -10 255 い 43 console. 10g(Number('10' ) , Number('0010'), Number('1.0e1・ ) ) ; / / 出力 : 10 10 10 / / 文字列も数値 (NaN 含む ) に変換される ・ ) , Number('123abc' ) ) ; / / 出力 : 0 0 NaN ( onsole. log(Number(' つ , Number(' / / 文字列は 16 進数を変換するが、最初の 0 を無視するので 8 進数の変換は行わない 〔0nS01e. log(Number('0x0a' ) , Number('010' ) ) ; / / 出力 : 10 10 / / 特殊な値も変換される console. 10g(Number(undefined), Number(null), Number(true), Number(false)); / / 出力 . NaN 0 1 0 / / オブジェクトと関数は NaN console. 10g(Number({}), Number(function(){})); 〃出力 : NaN NaN / / 空の配列は 0 、要素がひとっしかない配列はその値、複数要素を持つ配列は NaN console ・ log(Number([]), Number([1]), Number(['010']), Number([1,2])); 〃出力・ 0 1 10 NaN 数値への変換はグローバル関数の pa て selnt ( ) や parseF10at() でも実現できま す。明示的に整数に変換したい場合は parselnt ( ) を使用します。ただし、これら の関数は文字列の変換処理が Number ( ) と異なりますので注意してください ( 例 : Number( ・ 123PX,) は NaN を返しますが、 parseInt('123px') は 123 を返します ) 。
ー 141 11 章 Number() / / new 演算子と Number() コンストラクタを使った生成方法 ( 非推奨 ) ・ rs d 厄 netrse 、 a/KZQ4 次の例では、 JavaScript での数値の生成方法を列挙します。 生成に使用されます。 Number( ) コンストラクタは数値オプジェクトの生成と、プリミテイプ型の数値の 11 ゴ Numbe 「 0 オプジェクト console. log(typeof number0bjectWith0utNew) / / 出力 : ' number' console. 10g(number0bjectWith0utNew) ; / / 出力 : 1 var number0bjectWith0utNew = Number(1); / / new 演算子を使わずに Number() コンストラクタを使用してプリミティブ値を生成 ( onsole. log(typeof number0bject) / / 出力 : ・ object ・ console. 10g(number0bject); / / 出力 : 1 var numberObject = new Number(1) ; / / 一般的に使われる、リテラルでプリミティブ値を生成する方法 ( コンストラクタは裏で使用 されている ) var numberLiteral console. log(numberLiteral); / / 出力 : 1 console. log(typeof numberLiteral); / / 出力 . 'number'
170 ー 索引 0 Object() … 3 , 4 , 33 , 35 , 36 , 55 ~ 58 , , 111 , 163 , 1 ()bject. prototype. has()wnPropertY ( ) . ()bject. prototype. isProt0typeOf() .. ()bject. prototype. propertYIsEnumerable ( ) . ()bject. prototype. t0LocaleString().. Object. prototype. t0String ( ) .. ()bject. prototype. value()f().. … 43 , 107 , 108 , 127 join() . … 159 , 161 … 160 … 160 … 160 … 18 .. 160 . 160 ... 159 ... 160 … 160 … 159 … 159 … 160 … 159 ... 159 .. 160 … 160 ... 160 … 161 … 161 ... 161 … 161 … 161 … 160 … 160 … 161 Math .. Math. abs() .. Math. acos() .. Math. asin() . Math. atan ( ) . Math. atan2() .. Math. ceil() . Math. cos() .. Math. E … Math. exp() .. Math. floor() . Math. LNIO... Math. LN2 … Math.log() .. Math. LOGIOE .. Math. LOG2E .. Math. max ( ) .. Math. min() .. Math. PI … Math. pow() . Math. random() . Math. round() .. Math. sin() . Math. sqrt() . Math. SQRT1_2... Math. SQRT2 … Math. tan() .. … 58 ... 79 parseFloat() .. parselnt() . … 69 return 文 ... … 4 , 10 , 12 , 27 , 135 ~ 137 , 163 , 1 String() .. String.fromCharCode ( ) . ... 137 String. prototype. charAt ( ) .. … 138 String.prot0type. charC0deAt ( ) .. ... 138 String. prototype. concat() . ... 138 String. prototype. index()f() .. … 138 String. prototype.lastlndex()f().. ... 138 String. prot0type.localeCompare ( ) .. … 138 String. prototype. match() .. ... 138 String. prototype. replace ( ) . … 138 String. prototype. search ( ) . ... 139 String. prototype. slice ( ) .. … 139 String. prototype. split() . ... 139 String. prototype. substr() .. … 139 String.prot0type. substring ( ) . … 139 String. prototype. t0LocaleLowerCase ( ) .. ... 139 String. prototype. t0LocaleUpperCase ( ) .. … 139 String. prototype. t0LowerCase ( ) . ... 139 String.prot0type. t0String ( ) .. … 139 String.prot0type. t0UpperCase ( ) . … 139 String. prototype. value()f() . … 140 ... 11 , 12 , 14 , 62 , 92 , 163 ... 17 , 155 , 163 ... 10 , 141 , 142 , 144 , 163 , 164 ... 144 ... 144 … 144 … 144 … 144 .. 144 ... 145 … 145 ... 145 … 145 ... 145 new ( 演算子 ).. null.. Number() . Number. MAX_. _VALUE … Number. MIN VALUE .. Number. NaN . Number. NEGATIVE INFINIIY. Number. POSITIVE INFINI"IY . Number. prototype. t0Exponential() . Number. prototype. t0Fixed ( ) .. Number. prototype. toLocaleString ( ) .. Number. prototype. toPrecision ( ) . Number. prototype. t0String ( ) . Number. prototype. value()f().. … 66 , 85 , 86 , 88 , 89 , 91 , 164 this .. typeof ( 演算子 ) .. … 25 IJ … 17 , 41 , 80 , 157 , 158 , 163 undefined .. Underscore.js ..
xx 一目次 1 0 章 1 1 章 1 2 章 1 3 章 String( ) .. … 1 35 … 135 10.1 10.2 10.3 10.4 String() オプジェクト .. String() で文字列オプジェクトを生成、そして値を文字列に 変換… String() のプロバティとメソッド . String() のインスタンスのプロバティとメソッド (String. prototype のプロバティ ) . Number( ) . 11.1 11.2 11.3 11.4 11.5 Number() オプジェクト .. 整数と小数… Number() に引数を渡して数値に変換 . Number() のプロバティとメソッド . Number( ) のインスタンスのプロバティとメソノト (Number. prototype のプロバティ ).. BooIean( ) . … 136 … 137 … 137 … 1 41 … 141 … 142 142 … 144 … 144 ... 147 … 147 … 147 … 148 … 148 12.1 12.2 12.3 12.4 12.5 13.1 13.2 12.6 Boolean() オプジェクト .. Boolean() のパラメータ .. B001ean() のプロバティとメソッド .. Boolean ( ) のインスタンスのプロバティとメソノト (Boolean. prototype のプロバティ ).. 真偽値オプジェクトは格納されている値が false であっても true と評価される 149 いくつかの値は false 、それ以外はすべて true に変換 .. プリミティプ型文字列、数値、真偽値 .. … 150 … 1 51 プリミテイプ値は、プロバティにアクセスされるとオプジェクト に変換される 151 文字列、数値、真偽値は常にプリミテイプ型を使う .. ... 152
5.3 グローバルプロバティ、グローバル変数ー 79 enc0deURIComponent(uriComponent) 引数として渡した文字列に URL 工 ンコードを行い、その文字列を返す。ただし、英数字および次の記号 ( - ( ) ) のエンコードは行わない。 しくは false を返す。引数には関数実行前に Number() と同等の変換が行わ 引数として渡した数値が NaN かどうかを評価し、 true も isNaN(number) われるす。 もしくは false を返す。引数には関数実行前に Number ( ) と同等の変換が行 isFinite(number) 引数として渡した数値が実数かどうかを評価し、 true リティホールとなりえるため、利用は推奨されない。 eval(x) 引数として渡した文字列を JavaScript として実行する。セキュ れる。そのため、実際には数ではないもの (true 、 null 、 false と判定してしまう。 ーなど ) も 5.3 parseF10at(string) 引数として渡した文字列を数値に変換する。 Number() とは文字列の変換方法が異なる。 parselnt(string, radix) str に渡した文字列を、 radix に渡した底の値 をもとに整数値に変換する。 Number() とは文字列の変換方法が異なるすす。 グローバルプロバティ、グローバル変数 「グローバルオプジェクト」をグローバルオプジェクトに格納されている変数 ( 「グ ローバル変数」 ) や、プロバティ ( 「グローバルプロバティ」 ) と混同しないようにし てください。グローバルオプジェクトはすべてのオプジェクトを格納している唯一無 二のオプジェクトです。グローバル変数、グローバルプロバティはそのグローバル オプジェクト直下に格納されている、他のオプジェクトのスコープ外にあるプロバ テイや変数のことをいいます。これらの値にはどこからでもアクセスできるため「グ radix には必ず引数を渡すようにするべきです。 換されます。しかし、実装環境 ( プラウザ ) によっては 0 で始まる数値が 8 進数になる場合があるため、 訳注 parselnt() の radix を省略した場合、値が 0x もしくは OX から始まらない場合は通常 10 進数に変 は 11.3 節を参照してください。 訳注以降 3 つ (isFinite(number) 、 isNaN(number) 、 parseF10at(string)) の Number() 型変換について ローバル」であるとみなされ、すべてのコードがスコープチェーンを通じてこれらの す
144 ー 1 1 章 Numbe 「 () 114 Numbe 「 0 のプロバティとメソッド Number() オプジェクトは次のプロバティを持っています ( 継承されたプロバティ プロバティ とメソッドを除く ) 。 MAX VALUE 308 。 MIN VALUE JavaScript が表現可能な最大値。 1.7976931348623157e + JavaScript が表現可能な、 0 より大きい最小値。 5e - 324 。 NaN—「数値ではない」ことを表す数値。 typeof NaN は 'number' を 返す。 NEGATIVE INFINITY POSITIVE INFINITY prototype -lnfinity と同値 lnfinity と同値 11.5 Number() のインスタンスのプロバティと メソッド (Number.prot0type のプロバティ ) Number ( ) オプジェクトによって生成されたオプジェクトは以下のプロバティとメ ソッドを持っています。プリミテイプ型の数値のラッパーオプジェクトも同様のプロ パティとメソッドを持っています。 インスタンスプロバティ ・ constructor インスタンスメソッド ・ toExponential(fractionDigits) とした、指数表記の文字列を返す。 fractionDigits 指定した数を指数
13.2 文字列、数値、真偽値は常にプリミティプ型を使う一 153 理由となりえます。その他の理由として、 typeof 演算子の返す値が値を生成した方 法に依存するという理由があります。文字列、数値、真偽値のオプジェクトを生成し た場合、 typeof 演算子は object を返し、リテラルで値を生成した場合はそれぞれの oolean りを返します。 型 (' string ・、 number' 、 赶・ s 記 . ne び・ JV7 / / 文字列、数値、真偽値のオブジェクト console. log(typeof new String('f00')); / / 出力 :'object ・ console. log(typeof new Number(1)) ; / / 出力 : ・ object ・ console. log(typeof new B001ean(true) ) ; / / 出力・・ object ' / / リテラルで値を生成した場合 console. log(typeof ・ f00 ・ ) ; / / 出力 : 'string ・ console. log(typeof 1 ) ; / / 出力 : 'number' console. log(typeof true); / / 出力 :'boolean ・ 文字列、数値、真偽値を判断するために typeof 演算子を使っている場合は特に れらをオプジェクト型で宣言するのは避けるべきです。
142 ーい章 Numbe 「 () 11.2 整数と小数 JavaScript の数値は通常、整数値か小数値で記述されます 1 ・。次の例では、 プリミ テイプ型の整数値とプリミテイプ型の浮動小数点型の値を生成します。 se ・ 6 var integer = 1232134 ; console. log(integer); / / 出力 : 1232134 var fIoatingP0int = 2.132 ; console. 10g(f10atingP0int); / / 出力 : 2.132 通常はあまり行われませんが、 1 6 進数や 8 進数の表現や、指数表記も可能です。 ・ 1 6 進数ー一頭に 0x を付与 ( 0x 幵、 0X0f など。大文字小文字は問わない ) ・ 8 進数ーー一頭にひとつ以上の O を付与 ( 060 ( IO 進数の 48 に変換 ) など。ただし 60' ( 文字列 ) が数値に変換される際には頭の 0 は無視されて 60 に変換される ) ・指数表記ーー仮数と指数を e ( もしくは E) で区切る ( 1.23e10 、 -1.23E -4 など ) NOTE 11.3 Number() に引数を渡して数値に変換 Number( ) 関数は、渡された引数をもとに数値オプジェクトもしくはプリミティ プ型数値を生成します。 new 演算子とともに利用すると数値オプジェクトを生成し、 new 演算子を使用せすに単独で呼び出すとプリミテイプ型の数値を生成します。引数 に数値以外が渡された場合は数値に変換して返します。 このプリミテイプ型数値への変換を、 Number() を使って明示的に利用する機会は 少ないかもしれませんが、数値変換が必要な場合に JavaScript が内部的に使用する ことがあります。たとえば、 Math 関数のメソッド ( 16 章で紹介 ) に渡される引数は、 計算に使用される前に Number() と同等の数値の型変換が行われます。 す訳注 JavaSc ⅱ pt の整数値と小数値は共通の「数値」 (number) 型として表現されます。また、ある数 値が整数かどうかを判定する関数は ECMA-262 Edition 3 では用意されていません (Edition 6 ドラフ トで提案されています ) 。次のような簡単な関数を記述することで整数値の判定は可能です (function islnteger(n) { return n % 1 = = 0 ; } ) 。ただし、指数表記の値や数値以外の値 ()a ・や・ 100 ・、 null 、 true/false 、オプジェクト、配列など ) が渡される可能性がある場合、 1.0 を整数とみなさない場合、 lnfinity を考慮する場合などは、それぞれの場合に合わせたコードが必要です。