JavaScriptのよくある方法2015
6064 ワード
push()とpop()の方法:
ECMAScript配列も配列の挙動を他のデータ構造と類似させる方法を提供している.具体的には、配列はスタックのように表現されてもよく、後者は挿入および削除を制限することができるデータ構造である.
スタックは、LIFO(last-i-n-first-out)のデータ構造であり、最新の追加項目は最初に取り除かれる.スタックの中の項目の挿入(プッシュ)または除去(ポップアップ)は、1つの位置のスタックの上だけで発生します.
ECMAScriptは配列のためにPush()とpop()の方法を提供して、類似のスタックの挙動を実現します.
push()方法は、任意の数のパラメータを受信し、それらを配列の最後に1つずつ追加し、修正された配列長を返します.
一方、pop()メソッドは、配列の最後の項目を配列の最後から削除し、配列のlength値を減らし、削除された項目を返します.次の例を見てください.
var colors = new Array(); //
var count = colors.push("red", "green"); //
alert(count); //2
count = colors.push("black"); //
alert(count); //3
var item = colors.pop(); //
alert(item); //black
alert(colors.length); //2
ジョイン()メソッド:配列継承のtoLocal String()、toString()とvalueOf()の方法は、デフォルトでは、カンマ分割文字列として配列項目に返されます.また、join()方法を使用すると、この文字列は異なる分割子を使用して構築され得る.
join()メソッド値は、1つのパラメータだけを受信します.つまり、区切り記号として使用する文字列で、すべての配列項目を含む文字列を返します.次の例を見てください.
var colors = ["red", "green", "blue"];
alert(colors.join(",")); //red,green,blue
alert(colors.join("||")); //red||green||blue
ここではジョイン()法を用いてtoString()法の出力を再現した.コンマを伝える場合、コンマで区切られた配列値が得られます.最後の行のコードの中で、私達は二重縦線の記号を伝達して、結果は文字列の“red𞓜green 124; blue”を得ました.配列のいずれかの値がnullまたはundefinedである場合、この値は、jin()、toLocalle String()、tostring()、およびvalueOf方法で返された結果に、空の文字列で表される.toLocale String()、toString()、valueOf():
すべてのオブジェクトは、toLocale String()、tostring()とvalueOf()の方法を有しており、配列のtostring()とvalueOf方法は同じ値を返し、つまり、配列内の各値の文字列形式でつなぎ合わせられた1つのコンマで分割された文字列である.
実際には、この文字列を作成するために、配列ごとにtoString()メソッドを呼び出します.この例を見てみます.
var colors = ["red", "blue", "green"]; // 3
alert(colors.toString()); //red, blue, green
alert(colors.valueOf()); //red,blue,green
alert(colors); //red,blue,green
ここではまず、配列の文字列表現を返すために、各値の文字列が一つの文字列にスティッチングされていることを示し、中にはコンマ分割ができます.最後の行のコードは直接に配列をalert()に伝えました.alert()は文字列パラメータを受け入れるので、バックグラウンドでtoString()メソッドを呼び出すので、直接ToString()メソッドを呼び出すのと同じ結果が得られる.
また、toLocal String()方法は、toString()とvalueOf()方法と同じ値を返すことが多いが、必ずしもそうではない.配列のtoLocareStering()メソッドを呼び出すと、コンマで区切られた配列の文字列も作成されます.
前の2つの方法と唯一の違いは、ここでiは、各項目の値を取得するために呼び出されるのは、各項目のtoLocall String()方法であり、toString()方法ではないことであると指摘されている.この例を見てください.
var person1 = {
toLocaleString: function () {
return "Nikolaos";
},
toString: function () {
return "Nicholas";
}
}
var person2 = {
toLocaleString: function () {
return "Grigorios";
},
toString: function () {
return "Greg";
}
};
var people = [person1, person2];
alert(people); //Nicholas,Greg
alert(people.toString()); //Nicholas,Greg
alert(people.toLocaleString()); //Nikolaos,Grigorios
検出タイプ:変数が基本データタイプであるかどうかを検出するには、typeofオペレータが最適なツールです.typeofオペレータは、変数が文字列、数値、ブール値か、undefinedかを決定するための最適なツールです.
変数の値がオブジェクトまたはnullであると、typeofオペレータは次の例のように「Object」に戻ります.
var s = "Nicholas";
var b = true;
var i = 2;
var u;
var n = null;
var o = new Object();
alert(typeof s); //string
alert(typeof i); //number
alert(typeof b); //boolean
alert(typeof u); //undefined
alert(typeof n); //object
alert(typeof o); //object
基本データタイプを検出する際には、typeofは非常に有効なヘルパーですが、参照タイプの値を検出する際には、このオペレータの役割は大きくありません.通常、私達はある値が対象であることを知りたくなくて、それがどのタイプの対象なのかを知りたいです.このため、ECMAScriptはinstance ofオペレータを提供しています.その文法は以下の通りです.
result = variable instanceof constructor
変数が参照タイプの一例である場合、instance ofオペレータはtrueに戻ります.次の例を見てください.alert(person instanceof Object); // person Object ?
alert(colors instanceof Array); // colors Array ?
alert(pattern instanceof RegExp); // pattern RegExp ?
規定によると、すべての参照タイプの値はObjectの例である.したがって、参照タイプ値とObjectコンストラクタを検出すると、instance ofオペレータは常にtrueに戻ります.もちろん、instance ofオペレータを使用してベースタイプの値を検出すると、オペレータは常にfalseに戻ります.typeofオペレータの検出関数を使用すると、そのオペレータは「function」に戻ります.SafariとChromeでtypeof検出正規表現を使うと、この演算子も誤って「function」に戻ります.