001 - みる会図書館


検索対象: 開眼!JavaScript : 言語仕様から学ぶJavaScriptの本質
186件見つかりました。

1. 開眼!JavaScript : 言語仕様から学ぶJavaScriptの本質

152 ー 13 章プリミティプ型文字列、数値、真偽値 ー ne ( onsole. 10g(stringLitera1. length) ; / / 出力 : 3 console. 10g(stringLitera1[ ・ length ・ ]) ; / / 出力 : 3 console. log('bar'. length); / / 出力 : 3 ( onsole. log('ba て・ [ ・ length' ]); / / 出力 : 3 / / 数値オブジェクトをオプジェクトとして扱う var number0bject = new Number(). 10023 ) ; console. 10g(number0bject. t0Fixed()); / / 出力 : 1 console. 10g(number0bject[ 't0Fixed' ] ( ) ) ; / / 出力 : 1 / / 数値プリミティブをオブジェクトとして扱うとオブジェクトに変換する var numberLiteral = 1.10023 ; console. log(numberLitera1. t0Fixed()); / / 出力 : 1 console. 10g(numberLitera1[ 't0Fixed' ] ( ) ) ; / / 出力 : 1 ( onsole ・ 10g ( ( 1234 ). t0St ⅱ ng ( ) ) ; / / 出力 : ' 1234 ' ( onsole. 10g ( 1234 [ ・ toSt ⅱ ng ・ ] ( ) ) ; 〃出力 : ' 1234 ' 〃真偽値オブジェクトをオブジェクトとして扱う var b001eanObject = new B001ean( の ; console. 10g(b001ean0bject. t0String()); / / 出力 : 'false' console. log(b001ean0bject[ 't0String' ] ( ) ) ; / / 出力 : ・ false' / / 真偽値プリミティブをオブジェクトとして扱うとオプジェクトに変換する var booleanLitera1 = false; console. 10g(b001eanLitera1. t0String()); / / 出力 : 'false' console. 10g(b001eanLitera1[ ・ t0String' ] ( ) ) ; / / 出力 : 'false' console. log((true). toString()); / / 出力 : 'true' console. log(true[ ・ t0String ・ ] ( ) ) ; / / 出力 : ・ true ・ 数値プリミティブのプロバティに直接アクセスする場合、最初の数字を評価しなければな りません ( 例 : (1). toString(); 、 1.. toString(); 2 つ目の例でドットが 2 つ連続してい るのは、 1 つ目のドットは小数点として評価されるからです。 1. toString() を実行すると 工ラーが発生します ) 。 NOTE 13.2 文字列、数値、真偽値は常にプリミテイプ型を使う 文字列、数値、真偽値のプリミテイプ値はリテラル記法で早く簡単に記述すること ができます。このことだけでもオプジェクトを使わずにプリミテイプ値を使う十分な

2. 開眼!JavaScript : 言語仕様から学ぶJavaScriptの本質

ー 147 12 章 B00 厄 an() 12.1 B00 厄 an() オプジェクト B001ean() コンストラクタは t て ue もしくは false を表す真偽値オプジェクトの生 成と、真偽値プリミテイプ値の生成に使用されます。 次の例では、 JavaScript での真偽値の生成方法を列挙します。 ツ/ ・ sfiddle. net/ ・ se ・ 8G7 / / new 演算子と Boolean() コンストラクタを使った生成方法 ( 非推奨 ) var myBooIeanI = new B001ean(fa1se); / / using new keyword console. log(typeof myB001ean1); / / 出力 : 'object' / / new 演算子を使わすに Boolean() コンストラクタを使用してプリミテイプ真偽値を生成 var myBoolean2 = Boolean( の ; console. log(typeof myB001ean2) ; / / 出力 : ・ b001ean ' / / リテラルでプリミティブ値を生成 ( コンストラクタは裏で使用されている ) var myB001ean3 = false; console. log(typeof myB001ean3); / / 出力 : ・ b001ean' console. 10g(myB001ean1, myB001ean2, myB001ean3); / / 出力 : false{} false false 122 B00 厄 anO のバラメータ BooIean ( ) コンストラクタは、 JavaScript で有効な値を引数として 1 っとり、 の引数は次のルールで true か false に変換されます。 0 、 -0 、 null 、 false 、 NaN 、 undefined 、そして空の文字列 ( 当は false に、これ以外のすべての有効な

3. 開眼!JavaScript : 言語仕様から学ぶJavaScriptの本質

150 ー 12 章 BooIean() 12.6 いくつかの値は false 、 それ以外はすべて true に変換 12.2 節で一度述べていますが、 B001ean() コンストラクタ関数を使用した値の変換 に関わるためここでもう一度述べておく価値はあると思います。 真偽を判定するコンテクストにおいて、値が 0 、 - 0 、 null 、 false 、 NaN 、 undefined 、そして空の文字列 ( 物であれば false とみなされます。これ以外のす べての有効な JavaScript の値は true とみなされます。 ワ、 sfiddle. netnsev / / 以下はすべて false ( onsole. 10g ( B001ean ( 0 ) ) ; ( onsole. 10g ( B001ean ( - の ) ; console. 10g(B001ean(fa1se) ) ; console. log(B001ean(' console. 10g(B001ean(undefined) ) ; ( onsole. 10g ( B001ean ( null ) ) ; / / 以下はすべて true ( onsole. 10g ( B001ean ( 1789 ) ) ; console. 10g(B001ean('fa1se ・ ) ) ; は異なる console. 10g(B001ean(Math)); console. 10g(B001ean(Array())); / / als ざという文字列は、真偽値プリミティブの false と JavaScript ではどの値が false としてみなされるのかどうかを知っておくことが重 要です。それにより、どのような値が true とみなされるかどうかもわかります。

4. 開眼!JavaScript : 言語仕様から学ぶJavaScriptの本質

い 05 クロージャはスコープチェーンによって生成される 7.7 ;/t$fiddle,ne se ・ a Ⅳむ 49 return funcArray; } ; / / 即時実行を行わない var myArray1 = 10gE1ementNumber(3) ; var myArray2 = 10gE1ementNumber(5) ; / / myArray1 に格納された関数をそれそれ実行 myArray1[1](); / / 出力 : 1 3 myArray1[2](); / / 出力 . 2 3 myArray2[1](); / / 出力 : 1 5 myArray2[2](); / / 出力 : 2 5 myArray1 と myArray2 それぞれの変数 i の出力値が異なっています。 myArray1 と myArray2 は異なる関数を参照しているため、それぞれの関数スコープで定義されて いる変数 i の値が参照されます ( 図 7-3 参照 ) 。 10g EIementNumber( 3 ) スコープ var 1 var funcArray [ ] い ] スコープ [ 0 ] スコープ myArray1[] n = 0 〃引数 ニ 1 / / 引数 console. 10 n, i) ( 0n501e.10g ( n , i); n 本体 本体 本体 return funcArray; 10gE 1ementNumber( 5 ) スコープ var 1 var funcArray [ ] い ] スコープ [ のスコープ myArray2[] n = 0 / / 引数 n = 1 〃引数 ( onsole. 10 n, i ( onsole. 10g ( n , i); 本体 本体 本体 return funcArray ; 図 7-3 myArray1 と myArray2 はグローバルスコープに異なる関数スコープを生成する

5. 開眼!JavaScript : 言語仕様から学ぶJavaScriptの本質

12.5 真偽値オブジェクトは格納されている値が囿 se であっても t 「 ue と評価される一 149 インスタンスプロ / ヾティ ・ constructor インスタンスメソッド ・ toString()—真偽値が true の場合はプリミテイプ型の文字列 'true ・ を、それ以外の場合は竏 als ざを返す。 ・ va1ue0f()—プリミテイプ型の真偽値を返す。 12.5 真偽値オプジェクトは格納されている値が false であっても true と評価される B001ean ( ) コンストラクタに生成された ( プリミテイプ型ではない ) 真偽値オプ ジェクトは、あくまでもオプジェクトであって、たとえそれが false の値を持ってい るとしても評価時には true に変換されてしまいます。次の例で、このことを実証し ます。 社 : / sfiddle. etrse ・ a/vAta / / false の真偽値オブジェクトを生成 var fa1seVa1ue = new B001ean(fa1se); console. 10g(fa1seValue); / / 真偽値オブジェクトが出力される if (fa1seVa1ue) { / / 真偽値オブジェクトの内容が false であっても、オブジェクト自体は常 に true 値とみなされる console. log('falseVa1ue is truthy' ) ; もし真偽値ではない値を真偽値に変換したいのであれば、 new 演算子を使用せずに B001ean() に値を渡してください。すると B001ean() はプリミテイプ値 (true もし くは false) を返します。

6. 開眼!JavaScript : 言語仕様から学ぶJavaScriptの本質

26 ] 章 JavaSc 「 ipt オブジェクト d 0 / / プリミティブ値 var myNu11 = null; var myUndefined = undefined; var primitiveString1 = "string ・ var primitiveString2 = String('string' ) ; var primitiveNumber1 = 10 ; var primitiveNumber2 = Number(' 10 ・ ) ; var primitiveBoolean1 = true; = B001ean('true' ) ; var primitiveBoolean2 ・・ ? 気をつけて ! console. log(typeof myNull); / / 出力 object ( 0n501e. log(typeof myUndefined) ; / / 出力 . undefined ( onsole. log(typeof primitiveString1, typeof primitiveString2) ; / / 出力 : string string ( onsole. log(typeof primitiveNumber1, typeof primitiveNumber2) ; / / 出力 : number number ( onsole. log(typeof primitiveB001ean1, typeof primitiveB001ean2) ; / / 出力 : boolean boolean / / オブジェクト var myNumber = new Number(23) ; var myString = new String('male ・ ) ; = new B001ean(fa1se); var myBoolean var my0bject = new 0bject() ; var myArray = new Array(' f00 ' var myFunction = new Function()x ・ var myDate = new Date() ; var myRegExp = new RegExp('\\bt[a-z] + \\b' ) ; var myE てて 0 て = new Error('Error! ' ) ; 'return X ( onsole. log(typeof myNumber) ; / / 出力・ object console. log(typeof myString) ; / / 出力 . 0bject console. log(typeof myB001ean); / / 出力 . object ( onsole. log(typeof my0bject) ; / / 出力 object ( onsole. log(typeof myArray) ; / / 出力 object console. log(typeof myFunction); / / 出力 : function ( onsole. log(typeof myDate) ; / / 出力・ object ( onsole. log(typeof myRegExp) ; / / 出力・ object console. log(typeof myError); 〃出力 object 気をつけて ! typeof 演算子を使う場合は、対象の値の種類によって、返される値が異なること についてよく知っておくべきです。

7. 開眼!JavaScript : 言語仕様から学ぶJavaScriptの本質

1 .8 null 、 undefined 、 'st 「 ing' 、 低いレイヤの単位です。 10 、 t 「 ue 、 f 引 se はオブジェクトではなくプリミテイプ型 17 20 阯 ・ String() や Number() 、 B001ean() の各コンストラクタはオブジェクトを生成しますが、 同時にプリミティブ値を生成することもできる、二度美味しいコンストラクタです。 これらのコンストラクタは常にオプジェクトを返すわけではなく、 new 演算子を付与 せずに実行した場合はプリミティブ値を返しますす。 1.8 null. undefined 、 lstringl• IO 、 true 、 false はオプジェクトではなくプリミテイプ型 null と undefined は JavaScript の値として宣言する際にコンストラクタを必要と せず、また new 演算子を必要ともしません。 null もしくは undefined を使用する際 は、これらがまるで定数であるかのように使用するだけです。文字列、数値、真偽値 といった他のプリミテイプ値については、コンストラクタから返される値ではありま すが、やはりオプジェクトではありません。 以下のコードでプリミテイプ型と他のネイテイプ JavaScript オプジェクトを比較 します。 / / コンストラクタ関数に new 演算子を付与していないことに留意してください。 / / プリミティブ値を生成する際には、オブジェクトは生成されません。 = B001ean('true' ) ; 竏 00 " ・ var primitiveBoolean2 var primitiveBoolean1 = true; var primitiveNumber2 = Number(' 10 ' ) ; var primitiveNumber1 = 10 ; var primitiveString2 = string(' f00 ・ ) ; var primitiveString1 = す訳注ただし、実際にコンストラクタとして使われることはありません。 'boolean,boolean ・ ( onsole. log(typeof primitiveB001ean1, typeof primitiveB001ean2) ; / / 出力 console. log(typeof primitiveNumber1, typeof primitiveNumber2) ; / / 出力 : ・ number, number, ( onsole. log(typeof primitiveString1, typeof primitiveString2) ; / / 出力 : ・ string, string //confirm the typeof is not object

8. 開眼!JavaScript : 言語仕様から学ぶJavaScriptの本質

104 ー ープ 7 章 スコープとクロ function() スコ var 1 ージャ それそれのローカル変数 i を参照するため 10gE 1ementNumber [ ] var funcArray [ ] [ 0 ] スコーフ i = 0 〃引数 console. 10 i 本体 ret urn funcArray; 本体 親関数の変数 i を参照しない 本体 i C0n501e.10 i = 1 ″引数 い ] スコーフ [ 2 ] スコーフ console. 10 i i = 2 / / 引数 本体 図 7-2 関数に渡された変数 i の値は、それぞれの関数スコープの変数 i として定義される / / 配列に格納された関数をそれぞれ実行 logE1ementNumber[0](); / / 出力 : 0 10gE1ementNumber[1](); / / 出力 : 1 10gE1ementNumber[2](); / / 出力 : 2 要素に格納 funcArray[i] = func(i); 〃インデックスを出力する関数を funcArray のそれぞれの f0 て (i = 0 ; i く len; i + + ) { return function() { ( onsole. 10g ( n , i); } ; / / n とともに変数 i も出力 / / 変数 n がこのスコープに定義される var func = function(n) { 〃バラメータ名は i ではなく n var 1 ; var funcArray = var 10gE1ementNumber = function(len) { / / len で配列の長さを指定 ツ・ dd . ne びぎⅳ u49 ンスであっても、それぞれが定義された時点で独自のスコープを生成します。 次の例では子関数を持つ配列を複数生成します。同じ関数から生成されたインスタ が独自に持っているため、それぞれの子関数は独自の数値を出力します ( 図 7-2 参 値となります ( 「 4.7 関数に引数を渡す」を参照 ) 。この変数 i はそれぞれの子関数 際、変数 i の値が func() 関数に引数として渡され、 func() 関数スコープの変数 i の 今度は各関数がそれぞれの値を出力しました。 funcArray[i] に子関数を格納する

9. 開眼!JavaScript : 言語仕様から学ぶJavaScriptの本質

138 ー 1 0 章 St 「 ing() きます。 インスタンスプロ / ヾティ ・ constructor ・ length ーー一文字列の長さ。 Unicode コードユニット単位で数える。 インスタンスメソッド を元の文字列で検索し、て epla ( eVa1ue に渡した文字列で置き換える。 searchVa1ue に渡した文字列 replace(searchVa1ue, replaceVa1ue) null を返す。 る。 1 つ以上マッチする場合は結果を配列で返し、マッチしない場合は 引数として渡した正規表現とのマッチングを試み match(regexp) す。 も前の場合には負の値、後の場合は正の値、同じ文字の場合は 0 を返 that に渡した文字のソート順が元の文字より 10ca1eCompare(that) 文字列を検索する。 ンデックスを返す。 position が指定されている場合は指定位置以前の た文字列を元の文字列の末尾から検索し、存在する場合はその最初のイ searchString に渡した渡し 1astIndexOf(searchString, position) position が指定されている場合は指定位置以降の文字列を検索する。 元の文字列で検索し、存在する場合はその最初のインデックスを返す。 searchString に渡した文字列を indexOf(searchString, position) 結合して返す。元の文字列は変更されない。 .. ] ] ]) ーー複数の文字列をひとつに concat( [stringl [ , string2 [ , 引数として渡した渡した値の位置の文字の文字 引数として渡した値の位置の文字を返す。 コードを返す。 charC0deAt(pos) charAt(pos)

10. 開眼!JavaScript : 言語仕様から学ぶJavaScriptの本質

4.6 JavaSc 「 ipt の関数は第一級関数ー に、変数や配列、もしくはオプジェクトに「値」として格納することができます。ま 65 :// 、 sfiddle. net/ ・ s ・ 7 これらの特徴を持っているため、 JavaScript の関数は第一級関数ですす。 た、関数を引数として関数に渡したり、関数を関数の戻り値にすることもできます。 = {method: function(){}}; / / funcC. method() もしくは funcC[ 'method' ] ( ) で呼ぶ = [function(){}]; / / funcB[0]() で呼ぶ = function(){}; / / funcA() で関数を呼ぶ 〃関数は、変数 (funcA) 、配列 (funcB) 、そしてオブジェクト (funcC) に格納できる var funcC var funcB var funcA var funcD = function(func){ 〃関数は引数として関数に渡したり、戻り値にすることができる / / 関数はオブジェクト runFuncPassedTOFuncD(); console. 10g('Hi' ) ; var runFuncPassedTOFuncD = funcD(function() { return func; console. 10g(funcE. answer); / / 出力 : 'yup funcE . answer = yup ・ , ・ / / インスタンスプロバティ var funcE = function() { } ; / / つまり、プロバティを持っこともできる す 訳注第一級関数とは第一級オプジェクトとして扱うことのできる関数で、 ような性質を持ちます。 変数やデータ構造に格納することができる 第一級オプジェクトは以下の サプルーチン ( 関数やプロシージャ ) のパラメータとして渡すことができる サプルーチン ( 関数やプロシージャ ) の戻り値となることができる 実行時に生成することができる 独自の存在を持つ ( 名前に依らない存在である ) JavaScript オプジェクトは第一級オプジェクトです。 http://ja.wikipedia.org/wiki/ 第一級関数を併 せて参照してください。