概要意味オブジェクトは JavaScript の主なデータ型です。特定の条件下では、数値、文字列、ブール値という 3 つのプリミティブ型の値も、プリミティブ型の「ラッパー オブジェクト」であるオブジェクトに自動的に変換されます。 いわゆる「ラッパー オブジェクト」とは、それぞれ数値、文字列、ブール値に対応する 3 つのネイティブ オブジェクト Number、String、Boolean を指します。これら 3 つのネイティブ オブジェクトは、プリミティブ値をオブジェクトに変換 (パッケージ化) できます。 var v1 = 新しい数値(123); var v2 = 新しい文字列('abc'); var v3 = 新しいブール値(true); typeof v1 // "オブジェクト" typeof v2 // "オブジェクト" typeof v3 // "オブジェクト" v1 === 123 // 偽 v2 === 'abc' // 偽 v3 === 真 // 偽 上記のコードでは、元の型の値に基づいて、対応する 3 つのラッパー オブジェクトが生成されます。ご覧のとおり、v1、v2、v3 はすべてオブジェクトであり、対応する単純型の値と等しくありません。 ラッパー オブジェクトを設計する目的は、まず、「オブジェクト」型が JavaScript のすべての値をカバーし、言語全体に共通のデータ モデルを持たせること、次に、プリミティブ型の値が独自のメソッドを呼び出せるようにすることです。 Number、String、Boolean の 3 つのネイティブ オブジェクトは、コンストラクターとして呼び出されるのではなく (つまり、呼び出し時に new なしで)、通常の関数として呼び出される場合、任意の型の値を数値、文字列、およびブール値に変換するためによく使用されます。 // 文字列を値に変換 Number('123') // 123 // 値を文字列に変換します String(123) // "123" // 値をブール値に変換します Boolean(123) // true 要約すると、これら 3 つのオブジェクトをコンストラクターとして使用すると (new を使用)、プリミティブ値をオブジェクトに変換できます。また、通常の関数として使用すると (new を使用せずに)、任意の型の値をプリミティブ値に変換できます。 インスタンスメソッド3 つのラッパー オブジェクトはそれぞれ、いくつかのインスタンス メソッドを提供します。ここでは、Object オブジェクトから継承された共通メソッドとして、valueOf() と toString() の 2 つを紹介します。 値() valueOf() メソッドは、ラップされたオブジェクト インスタンスに対応するプリミティブ型の値を返します。 新しい Number(123).valueOf() // 123 新しい文字列('abc').valueOf() // "abc" 新しい Boolean(true).valueOf() // true 文字列を変換する() toString() メソッドは、対応する文字列形式を返します。 新しい Number(123).toString() // "123" 新しい文字列('abc').toString() // "abc" 新しい Boolean(true).toString() // "true" プリミティブ型とインスタンスオブジェクト間の自動変換場合によっては、プリミティブ型の値がラップされたオブジェクトとして自動的に呼び出されます。つまり、ラップされたオブジェクトのプロパティとメソッドが呼び出されます。このとき、JavaScript エンジンはプリミティブ型の値をパッケージング オブジェクト インスタンスに自動的に変換し、使用後はすぐにインスタンスを破棄します。 たとえば、文字列では length プロパティを呼び出して文字列の長さを返すことができます。 'abc'.長さ // 3 上記のコードでは、abc は文字列であり、オブジェクト自体ではないため、その length プロパティを呼び出すことはできません。 JavaScript エンジンはそれを自動的にラッパー オブジェクトに変換し、このオブジェクトの長さプロパティを呼び出します。呼び出しが完了すると、一時オブジェクトは破棄されます。これは、プリミティブ型とインスタンス オブジェクト間の自動変換と呼ばれます。 var str = 'abc'; str.長さ // 3 // var strObj = new String(str) と同等 // 弦 { // 0: "a"、1: "b"、2: "c"、長さ: 3、[[PrimitiveValue]]: "abc" // } strObj.長さ // 3 自動変換によって生成されたラッパー オブジェクトは読み取り専用であり、変更することはできません。したがって、文字列に新しいプロパティを追加することはできません。 var s = 'Hello World'; sx = 123; sx // 未定義 上記のコードは文字列 s に x プロパティを追加しますが、結果は無効であり、常に undefined を返します。 一方、呼び出しが完了すると、ラップされたオブジェクト インスタンスは自動的に破棄されます。つまり、次に文字列のプロパティを呼び出すときには、前の呼び出しで生成されたオブジェクトではなく、新しく生成されたオブジェクトが呼び出されるため、前のオブジェクトに割り当てられたプロパティを取得することはできません。文字列にプロパティを追加する場合は、そのプロトタイプ オブジェクト String.prototype でのみ定義できます。 カスタムメソッドネイティブ インスタンス メソッドに加えて、ラッパー オブジェクトでは、元の型の値を直接呼び出すためのカスタム メソッドとプロパティを定義することもできます。 たとえば、double 文字列と数値に double メソッドを追加できます。 String.prototype.double = 関数(){ this.valueOf() + this.valueOf() を返します。 }; 'abc'.double() // abcabc Number.prototype.double = 関数(){ this.valueOf() + this.valueOf() を返します。 }; (123).double() // 246 上記のコードは、2 つのオブジェクト (それぞれ String と Number) のプロトタイプにメソッドを定義し、すべてのインスタンス オブジェクトで呼び出せるようにします。最後の 123 は括弧で囲む必要があることに注意してください。そうしないと、ドット演算子 (.) が小数点として解釈されます。 ブールオブジェクト概要Boolean オブジェクトは、JavaScript の 3 つのラッパー オブジェクトの 1 つです。コンストラクターとしては、主にブール値のラッパー オブジェクト インスタンスを生成するために使用されます。 var b = 新しいブール値(true); typeof b // "オブジェクト" b.valueOf() // 真 上記のコードの変数 b は、ブール オブジェクトのインスタンスです。その型はオブジェクトで、値はブール値 true です。 false に対応するラップされたオブジェクト インスタンスの場合、ブール演算の結果も true になることに注意してください。 if (新しいブール値(false)) { コンソールログ('true'); } // 真実 if (新しいブール値(false).valueOf()) { コンソールログ('true'); } // 出力なし 上記コードの最初の例では、false に対応するラッパー オブジェクト インスタンスがオブジェクトであるため true が取得され、論理演算を実行するとブール値 true に自動的に変換されます (すべてのオブジェクトに対応するブール値が true であるため)。インスタンスの valueOf メソッドは、インスタンスに対応する元の値を返します。この場合は false になります。 ブール関数の型変換効果ブール オブジェクトはコンストラクターとして使用されるだけでなく、単独で使用して任意の値をブール値に変換することもできます。現時点では、ブール演算は単純なツールメソッドです。 ブール値(未定義) // false ブール値(null) // false ブール値(0) // false ブール値('') // false ブール値(NaN) // false ブール値(1) // 真 ブール値('false') // true ブール値([]) // 真 ブール値({}) // true ブール値(関数() {}) // true ブール値(/foo/) // true 上記のコードで true が取得されるいくつかの状況はすべて、注意深く覚えておく価値があります。 ちなみに、二重否定演算子 (!) を使用して、任意の値をブール値に変換することもできます。 !!未定義 // 偽 !!null // 偽 !!0 // 偽 !!'' // 間違い !!NaN // 偽 !!1 // 真 !!'偽' // 真 !![] // 真実 !!{} // 真実 !!function(){} // 真 !!/foo/ // 真 最後に、一部の特殊な値の場合、Boolean オブジェクトの前に new を追加すると、完全に逆の結果が生成されるため、注意が必要です。 ブール値(偽)の場合{ コンソールにログ出力します。 } // 出力なし if (new Boolean(false)) { コンソールログ('true'); } // 真実 if (ブール値(null)) { コンソールログ('true'); } // 出力なし if (new Boolean(null)) { コンソールログ('true'); } // 真実 数値オブジェクト概要Number オブジェクトは数値に対応するラッパー オブジェクトであり、コンストラクターまたはツール関数として使用できます。 コンストラクターとして、値が数値であるオブジェクトを生成するために使用されます。 var n = 新しい数値(1); typeof n // "オブジェクト" 上記のコードでは、Number オブジェクトがコンストラクターとして使用され、値 1 を持つオブジェクトを返します。 ユーティリティ関数として、任意のタイプの値を数値に変換できます。 数値(真) // 1 静的プロパティNumber オブジェクトには、次の静的プロパティ (つまり、インスタンスではなく Number オブジェクトに直接定義されたプロパティ) があります。
Number.POSITIVE_INFINITY // 無限大 Number.NEGATIVE_INFINITY // -無限大 数値.NaN // NaN 数値.MAX_VALUE // 1.7976931348623157e+308 Number.MAX_VALUE < 無限大 // true 数値.MIN_VALUE // 5e-324 Number.MIN_VALUE > 0 // 真 数値.MAX_SAFE_INTEGER // 9007199254740991 数値.MIN_SAFE_INTEGER // -9007199254740991 インスタンスメソッドNumber オブジェクトには 4 つのインスタンス メソッドがあり、それらはすべて値を指定された形式に変換することに関連しています。 数値プロトタイプtoString() Number オブジェクトは、値を文字列に変換するために独自の toString メソッドを展開します。 (10).toString() // "10" toString メソッドは、出力の基数を示すパラメータを受け入れることができます。このパラメータを省略すると、値はデフォルトで 10 進数に変換され、文字列として出力されます。それ以外の場合は、パラメータで指定された基数に従って、数値が特定の基数の文字列に変換されます。 (10).toString(2) // "1010" (10).toString(8) // "12" (10).toString(16) // "a" 上記のコードでは、10 を括弧で囲んで、その後ろのドットがオブジェクト プロパティの呼び出しを示していることを示す必要があります。括弧を追加しないと、ドットは JavaScript エンジンによって小数点として解釈され、エラーが発生します。 10.toString(2) 関数 // 構文エラー: 予期しないトークン ILLEGAL JavaScript エンジンが小数点とオブジェクトのドット演算子を混同しない限り、どのような書き方でも機能します。 10 の前後に括弧を追加するだけでなく、10 の後に 2 つのドットを追加することもできます。JavaScript は最初のドットを小数点 (つまり 10.0) として解釈し、2 番目のドットをオブジェクト プロパティの呼び出しとして解釈するため、正しい結果が得られます。 10..toString(2) // "1010" // その他のメソッドには 10 .toString(2) // "1010" が含まれます 10.0.toString(2) // "1010" つまり、実際には、toString メソッドを小数点に対して直接使用できることになります。 10.5.toString() // "10.5" 10.5.toString(2) // "1010.1" 10.5.toString(8) // "12.4" 10.5.toString(16) // "a.8" toString メソッドは、角括弧演算子を使用して呼び出すこともできます。 10['toString'](2) // "1010" toString メソッドは、小数を他の基数の文字列に変換することしかできません。他の基数の数値を 10 進数に戻す場合は、parseInt メソッドを使用する必要があります。 数値プロトタイプtoFixed() toFixed() メソッドは、まず数値を指定された桁数の小数に変換し、次にその小数に対応する文字列を返します。 (10).toFixed(2) // "10.00" 10.005.toFixed(2) // "10.01" 上記のコードでは、10 と 10.005 が最初に小数点以下 2 桁に変換され、次に文字列に変換されます。 10 は括弧で囲む必要があります。そうしないと、その後ろの点が小数点として扱われます。 toFixed() メソッドのパラメータは小数点以下の桁数で、有効範囲は 0 ~ 20 です。この範囲を超えると RangeError エラーがスローされます。 浮動小数点数のため、小数点 5 の丸めは未定義であり、注意して使用する必要があります。 (10.055).toFixed(2) // 10.05 (10.005).toFixed(2) // 10.01 Number.prototype.toExponential() toExponential メソッドは、数値を科学的記数法に変換するために使用されます。 (10).toExponential() // "1e+1" (10).toExponential(1) // "1.0e+1" (10).toExponential(2) // "1.00e+1" (1234).toExponential() // "1.234e+3" (1234).toExponential(1) // "1.2e+3" (1234).toExponential(2) // "1.23e+3" toExponential メソッドのパラメータは、小数点以下の有効桁数で、範囲は 0 から 20 です。この範囲を超えると、RangeError エラーがスローされます。 Number.prototype.toPrecision() toPrecision メソッドは、数値を指定された有効桁数に変換するために使用されます。 (12.34).toPrecision(1) // "1e+1" (12.34).toPrecision(2) // "12" (12.34).toPrecision(3) // "12.3" (12.34).toPrecision(4) // "12.34" (12.34).toPrecision(5) // "12.340" toPrecision メソッドのパラメータは、1 から 21 までの有効な桁数です。この範囲を超えると、RangeError エラーがスローされます。 toPrecision メソッドは、浮動小数点数が正確に保存されないため、丸めに使用する場合、あまり信頼性が高くありません。 (12.35).toPrecision(3) // "12.3" (12.25).toPrecision(3) // "12.3" (12.15).toPrecision(3) // "12.2" (12.45).toPrecision(3) // "12.4" カスタムメソッド他のオブジェクトと同様に、Number.prototype オブジェクトにカスタム メソッドを定義できます。これは Number のインスタンスに継承されます。 Number.prototype.add = 関数 (x) { this + x を返します。 }; 8['追加'](2) // 10 上記のコードは、Number オブジェクト インスタンスの add メソッドを定義します。数値に対してメソッドを呼び出すと、その値は自動的に Number のインスタンス オブジェクトに変換されるため、add メソッドを呼び出すことができます。 add メソッドは値を返すため、チェーン操作を実行できます。 Number.prototype.subtract = 関数 (x) { これを返します - x; }; (8).加算(2).減算(4) // 6 より複雑な方法を展開することもできます。 Number.prototype.iterate = 関数 () { var 結果 = []; (var i = 0; i <= this; i++) の場合 { 結果.push(i); } 結果を返します。 }; (8).iterate() // [0, 1, 2, 3, 4, 5, 6, 7, 8] 上記のコードは、Number オブジェクトのプロトタイプに iterate メソッドをデプロイし、値を自動的に配列に移動します。 数値のカスタム メソッドは、そのプロトタイプ オブジェクト Number.prototype でのみ定義できることに注意してください。数値自体にカスタム プロパティを設定することはできません。 var n = 1; 1 = 1; nx // 未定義 上記のコードでは、n はプリミティブ値です。新しいプロパティ x を直接追加するとエラーは報告されませんが、役に立たなくなり、常に undefined が返されます。これは、プロパティが呼び出されると、n が自動的に Number のインスタンス オブジェクトに変換され、呼び出しが終了するとオブジェクトが自動的に破棄されるためです。したがって、次に n の属性を呼び出すと、実際には別のオブジェクトが取得され、属性 x は読み取れません。 文字列オブジェクト概要String オブジェクトは、JavaScript によってネイティブに提供される 3 つのラッパー オブジェクトの 1 つであり、文字列オブジェクトの生成に使用されます。 var s1 = 'abc'; var s2 = 新しい文字列('abc'); typeof s1 // "文字列" typeof s2 // "オブジェクト" s2.valueOf() // "abc" 文字列オブジェクトは配列のようなオブジェクトです (配列に似ていますが、配列ではありません)。 新しい文字列('abc') // 文字列 {0: "a", 1: "b", 2: "c", 長さ: 3} (新しい文字列('abc'))[1] // "b" 上記のコードでは、文字列 abc に対応する文字列オブジェクトには数値キー (0、1、2) と長さ属性があるため、配列のようにアクセスできます。 String オブジェクトは、コンストラクターとして使用されるだけでなく、任意の型の値を文字列に変換するツール メソッドとしても使用できます。 文字列(true) // "true" 文字列(5) // "5" 静的メソッド文字列.fromCharCode() String オブジェクトによって提供される静的メソッド (つまり、オブジェクト インスタンスではなくオブジェクト自体で定義されたメソッド) は、主に String.fromCharCode() です。このメソッドは、Unicode コード ポイントを表す 1 つ以上の数値をパラメーターとして受け取り、これらのコード ポイントで構成される文字列を返します。 String.fromCharCode() // "" String.fromCharCode(97) // "a" String.fromCharCode(104, 101, 108, 108, 111) // "こんにちは" 上記のコードでは、String.fromCharCode メソッドのパラメータが空の場合、空の文字列を返します。それ以外の場合は、パラメータに対応する Unicode 文字列を返します。 このメソッドは、0xFFFF より大きい Unicode コード ポイントを持つ文字をサポートしていないことに注意してください。つまり、渡されるパラメーターは 0xFFFF (つまり、10 進数で 65535) より大きくすることはできません。 String.fromCharCode(0x20BB7) // "ஷ" 文字列.fromCharCode(0x20BB7) === 文字列.fromCharCode(0x0BB7) // 真実 上記のコードでは、String.fromCharCode パラメータ 0x20BB7 が 0xFFFF より大きいため、返される結果にエラーが発生します。 0x20BB7に対応する文字は漢字である 上記は、JS パッケージ オブジェクトの詳細についての簡単な説明です。JS パッケージ オブジェクトの詳細については、123WORDPRESS.COM の他の関連記事に注目してください。 以下もご興味があるかもしれません:
|
<<: Windows サーバー ファイルをローカルにバックアップする方法、Windows サーバー データ バックアップ ソリューション
>>: Windows での MySQL の使用: 自動スケジュールバックアップの実装
Baidu には slot-scope に関する記事が既にたくさんありますが、以前よく学習しておら...
目次共通バージョンの紹介共通バージョンのダウンロードアドレスとインストール以下に簡単な違いを示します...
最も一般的に使用されるレイアウト要素として、DIV は Web 開発において重要な役割を果たします。...
目次このシリーズの背景概要PostgreSQL データベースの準備ソースからインストール仮想環境の作...
イベントについて: MySQL 5.1 では、イベントの概念が導入され始めました。イベントは「時間ト...
この記事では、テーブル切り替えプラグインを実装するためのJavaScriptのカプセル化コードを参考...
1. セレクターを調整するコンビネータを使用すると、セレクターの説明をより正確に記述できます (C...
## 1最近、docker デプロイメントを学習しており、当初は nginx を docker 化す...
ElementUIはテーブルリストのページング効果のチュートリアルを実装しています。参考までに。具体...
Nginxのproxy_cacheを使用してキャッシュサーバーを構築する1: ngx_cache_...
最近のプロジェクトでは、テキストを垂直に揃えたいと考え、CSS の writing-mode プロパ...
目次プロジェクトにおける一般的な支払い方法Alipay決済微信ペイプロジェクトにおける一般的な支払い...
さて、質問させてください。MySQL で列を int(0) に設定すると何が起こりますか?この問題を...
みなさんこんにちは。私と同じように混乱している方はいらっしゃいませんか。CSS は簡単に始められます...
1. 透明度を変更してテキストを徐々に点滅させると、次のような効果が得られます。 <!DOCT...