JavaScript オブジェクトは複合値であり、プロパティと名前付き値のコレクションです。属性値は「.」記号を通じて参照されます。プロパティ値が関数の場合、メソッドと呼ばれます。
①頻繁に使用するコードですが、その真の基礎原理を理解していない可能性があります:
var s = "hello world!"; var word = s.substring(s.indexOf(" ")+1,s.length);
前に述べたように、ここでの変数 s は単なる文字列のプリミティブ型です。どのようにして属性 (s.length) やメソッド (s.indexOf()、s.substring()) を持つことができるのでしょうか?はい、これはこれから紹介するパッケージング オブジェクトに関連しています。その理由は、文字列のプロパティが参照されている限り、JavaScript は新しい String を呼び出して文字列値をオブジェクトに変換し、このオブジェクトが String オブジェクトのメソッドを継承し、その参照を処理するために使用されるためです。物件へ。プロパティ参照が終了すると、新しく作成されたオブジェクトは破棄されます。
文字列と同様、数値とブール値にも独自のメソッドがあります。Number() および Boolean() コンストラクターを通じて一時オブジェクトを作成します。文字列、数値、またはブール値のプロパティにアクセスするときに作成される一時オブジェクトは、ラッパー オブジェクトです。 5 つのプリミティブ型のうち残りの 2 つ (null と unknown) にはラッピング オブジェクトがありません。これらのプロパティにアクセスすると、Uncaught TypeError が発生します。上記のコードを理解した後、次のコードを見てください:
var s = "test"; s.len = 4;//给它设置一个属性 var t = s.len;
ここで真剣でない学生は、最後の t が 4 に等しいと考えるでしょう。結局tは4になるんじゃないの?はい、最後の t の値は未定義です。理由を知りたい場合は、分析を読み続けてください。ここでのコードの 2 行目は、一時的な文字列オブジェクトを作成し、値 4 を len 属性に割り当ててから、オブジェクトを破棄しているだけであることがわかります。 3 行目は、元の文字列 s を使用して新しい文字列オブジェクトを作成し (これはコードの 2 行目で作成されたオブジェクトではありません。コードの 2 行目で作成されたオブジェクトは破棄されています)、その len 属性、this 属性を読み取ろうとします。当然存在しないので、式の結果は未定義です。このコードは、文字列、数値、およびブール値を読み取るプロパティ値またはメソッド (実際には、ラップされたオブジェクトの対応するプロパティ値またはメソッド) がオブジェクトのように動作することを示しています。ただし、プロパティに値を割り当てようとすると、この操作は無視されます。変更は一時オブジェクトに対してのみ発生し、一時オブジェクトは保持されません。
注: String()、Number()、および Boolean() コンストラクターを使用して、ラッパー オブジェクトを明示的に作成できます。
var s = "test",n=1,b=true;//一个字符串、数字和布尔值 var S = new String(s);//一个字符串对象 var N = new Number(n);//一个数值对象 var B = new Boolean(b);//一个布尔对象
①typeof(s); ->"string" typeof(S); ->"object" ②typeof(n); ->"string" typeof(N); ->"object" ③typeof(b); ->"string" typeof(B); ->"object"