11.核心JavaScriptノート:基本包装の対象

6607 ワード

本シリーズはZouStrongにて整理収録されています.
「JavaScript権威ガイド(第六版)」から整理し、「JavaScript高級プログラム設計(第三版)」
ECMAScriptは3つの特別な引用タイプを提供しています.Booleanタイプ、NumberタイプとSteringタイプです.
基本的なタイプの値は対象ではないので、論理的には属性と方法があるべきではないということは確かに知っていますが、私たちはlength属性を使って文字列の長さを調べたり、様々な方法で文字列を操作したりすることができます.why?
一.包装対象を陰的に作成する
実際には、基本的なタイプの値を読むたびに、バックグラウンドは、対応する基本的な包装タイプのインスタンス(包装対象)を作成し、これらのデータを操作するためのいくつかの方法を呼び出すことができるようにする.
var s1 = "text"; 
var s2 = s1.substring(2); 
第二行コードがs 1にアクセスすると、バックグラウンドは自動的に次の処理を完了します.
var s1 = new String("text");    //    String       (       ); 
var s2 = s1.substring(2);      //             ;
s1 = null;                   //         
上記の3つのステップは文字列の属性、方法を操作する瞬間に完了しました.(3つのステップはそれぞれBooleanタイプとNumberタイプにも適用されます.)
引用タイプと基本包装タイプの主な違いは対象の生存期間です.引用タイプの例は、現在のスコープが破壊される前にメモリに保存されています.自動的に作成された基本パッケージタイプの例は、行コードの実行瞬間だけに存在し、すぐに廃棄されます.これは文字列や数字、ブール値の属性になぜアクセスできますか?しかし、属性や方法が無効になっている理由です.
var s1 = "text"; 
s1.color = "red"; //    ,    ,    
alert(s1.color);    //        ,  color  ,  undefined 
二.明示的に包装対象を作成する
もちろん、Boolean、Number、Stringコンストラクタを明示的に呼び出して、基本的なパッケージタイプのオブジェクトを作成することができる.このようにライフサイクルは参照タイプと同じで、typeofは「object」に戻ります.
var s1 = new String("test");  
var b1 = new Boolean(true);
var n1 = new Number(100);    //                 
newは省略できますが、省略すれば変換関数に相当します.いずれの値も対応する基本タイプの値に変わります.
var s1 = String("test");   
var b1 = Boolean(true);  
var n1 = Number(100);      //                  
基本的なパッケージタイプを作成する例を表示する必要はほとんどありません.このようなやり方は基本的なタイプを処理しているのか、それとも引用タイプの値を処理しているのかが分かりにくくなります.基本的なタイプの値で属性と方法を呼び出した時に何が起こったのかを知るだけでいいです.
Objectコンストラクタは、着信値の種類に応じて、対応する基本的なパッケージタイプの例を返します.
var obj1= new Object("some text"); 
var obj2= new Object(true); 
var obj3= new Object(30); 
obj1 instanceof String;           //true 
obj2 instanceof Boolean;        //true 
obj3 instanceof Number;        //true 
三.Booleanタイプ
Booleanオブジェクトは、ブール値に対応するオブジェクトです.Booleanオブジェクトを作成するには、Boolean構造関数を呼び出してtrueまたはfalse値を入力できます.
var booleanObject = new Boolean(true); 
Booleanタイプの例は、valueOf()方法を書き換え、基本タイプ値trueまたはfalseを返します.toStering()を書き換えました.文字列「true」と「false」を返します.BooleanオブジェクトはECMAScriptの中ではあまり使い道がないです.それはしばしば誤解を引き起こすからです.
var falseObject = new Boolean(false); 
if ( falseObject ){
	//  
} 
いつまでもBooleanオブジェクトを使わないことを提案します.
四.Numberタイプ
Numberオブジェクトは、数値に対応するオブジェクトです.Numberオブジェクトを作成するには、Number構造関数を呼び出し、数値を入力できます.
var numberObject = new Number(100); 
Numberタイプも継承方法を書き換えました.書き換えたvalueOf()方法は、オブジェクトが表す基本タイプの数値を返します.また、2つの方法は文字列形式の数値を返します.
継承の方法に加えて、Numberタイプは、数値を文字列にフォーマットするためのいくつかの方法を提供しています.
1.toFixed()方法
この方法は指定された小数位の数値を返した文字列で表します.
var num = 10; 
alert(num.toFixed(2));    //"10.00" 
数値自体が指定より小さい桁が多いと、指定された最大小数位に近い値が四捨五入されます.
var num = 10.005; 
alert(num.toFixed(2));   //"10.01" 
2.toExponential()方法
この方法は数値の指数表示法の文字列形式を返します.(e表示法ともいいます.)
一つのパラメータも受信します.また、このパラメータも出力結果の小数点以下の桁数を指定します.
var num = 10; 
alert(num.toExponential(1));  //"1.0e+1" 
3.toPression()方法
1つの数値に対して、toPrecsion()方法は、固定サイズ(fixed)フォーマットを返し、指数(exponential)フォーマットを返してもよい.具体的なルールはどのフォーマットが一番いいですか?この方法は、数値を表すすべての数値の桁数(指数部分を除く)を受信する.
var num = 99; 
alert(num.toPrecision(1));  //"1e+2" 
alert(num.toPrecision(2));  //"99" 
alert(num.toPrecision(3));  //"99.0" 
実際、toPrecsion()は処理する数値によってtoFixedを呼び出すか、toExponentialを呼び出すかを決定します.これらの3つの方法は、正しい小数位を持つ値を、上または下に丸めることによって、最も正確な形で表すことができる.
直接的な実装を提案しないNumberタイプですが、理由は明示的にBooleanオブジェクトを作成するのと同じです.
五.Stringタイプ
Stringタイプは文字列に対応する参照タイプです.Stringオブジェクトを作成するには、String構造関数を呼び出して文字列に入力することができます.
var stringObject = new String("hello"); 
Stringタイプを継承するvalueOf()、toLocareStering()とtoStering()メソッドは、オブジェクトが示す基本文字列値を返します.
length属性
文字列に含まれる文字数を返します.
基本タイプの値は可変ではなく、すべての方法は一時的に生成された包装対象に発生します.
charAt()方法、charCodeAt()方法
1つの数字パラメータ(0の文字位置に基づいて)を受信し、指定された位置の文字を返します.
var stringValue = "hello world"; 
stringValue.charAt(1);    //"e"
stringValue.charCodeAt(1);    // 101
この2つの方法が入ってきた位置が範囲を超えている場合、前者は空の文字列を返します.」
また、ECMAScript 5では、[]文法を使用して指定された位置にアクセスできる文字(IE 7以下はサポートされていません)を規定しています.
var stringValue = "hello world"; 
stringValue[1];    // "e"
indexOf()方法、lastIndexOf()方法
文字列パラメータを受信し、指定されたサブストリングの位置を返します.ない場合は-1を返します.
オプションの2番目のパラメータ表示、検索開始の位置(この位置を含む)
2つの方法の違いは、indexOf()メソッドが文字列の先頭(または検索位置)からサブ文字列を後方に検索し、lastIndexOf()メソッドが文字列の最後(または検索位置)から前に検索することです.
var stringValue = "hello world"; 
alert(stringValue.indexOf("o"));        //4 
alert(stringValue.lastIndexOf("o"));     //7
alert(stringValue.indexOf("o", 6));      //7 
alert(stringValue.lastIndexOf("o", 6));   //4
concat()方法
複数の文字列パラメータを受信したら、スティッチングした新しい文字列を返します.
var string= "hello"; 
var newString =string.concat("zsz","12");   //"hellozsz12"
concat()は綴り文字列の公式的な使い方ですが、+操作子の方が使いやすいです.
slice()方法、substring()方法、substr()方法
いずれも1つまたは2つの数値パラメータを受信し、操作された文字列のサブストリングを返します.
最初のパラメータは、サブストリングの開始位置を表します.
ここで、slice()とsubstring()の2番目のパラメータは、終了位置を示す(含まない)
substr()の2番目のパラメータは、返した文字の個数を表します.
2番目のパラメータを指定しないと最後まで
var stringValue = "hello world"; 
alert(stringValue.slice(3));         //"lo world" 
alert(stringValue.substring(3));    //"lo world" 
alert(stringValue.substr(3));       //"lo world" 
alert(stringValue.slice(3, 7));      //"lo w" 
alert(stringValue.substring(3,7));  //"lo w" 
alert(stringValue.substr(3, 7));    //"lo worl"
これらの方法に渡すパラメータが負の値の場合,それらの挙動は異なる.
  • slice()メソッドは、入力された負の値を文字列の長さに加算する
  • .
  • substr()方法は負の第一パラメータに文字列の長さを加え、負の第二パラメータを0
  • に変換する.
  • substring()メソッドは、負のパラメータをすべて0
  • に変換します.
    trim()方法——ECMAScript 5
    先頭のスペースを削除した新しい文字列を返します.
    var stringValue = " hello world "; 
    stringValue.trim();     //"hello world"
    toLowerCase()方法
    toLocaree LowerCaseの方法
    toUpperCase()方法
    toLocaleUpperCase()方法
    文字列の大/小文字を返します.
    locale Compare()方法
    この方法は2つの文字列を比較し、次の値のうちの1つを返します.
    文字列がアルファベット内で文字列のパラメータの前に並ぶべきなら、負の値を返します.ほとんどは-1です.
    文字列が文字列のパラメータに等しい場合、0を返します.
    文字列がアルファベット内で文字列のパラメータの後に並べば、正の値を返します.
    match()方法、search()方法、replace()方法、split()方法
    詳細は正規表現の部分を参照してください.