JSパッケージオブジェクトに関する簡単な説明

JSパッケージオブジェクトに関する簡単な説明

概要

意味

オブジェクトは 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: 正の無限大、Infinity を指します。
  • Number.NEGATIVE_INFINITY: 負の無限大、-Infinity を指します。
  • Number.NaN: 数値以外の値を表し、NaN を指します。
  • Number.MIN_VALUE: 最小の正の数 (つまり、0 に最も近い正の数、64 ビット浮動小数点システムでは 5e-324) を表します。同様に、0 に最も近い負の数は -Number.MIN_VALUE です。
  • Number.MAX_SAFE_INTEGER: 正確に表現できる最大の整数、つまり 9007199254740991 を表します。
  • Number.MIN_SAFE_INTEGER: 正確に表現できる最小の整数、つまり -9007199254740991 を表します。
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 の他の関連記事に注目してください。

以下もご興味があるかもしれません:
  • JavaScript パッケージオブジェクトの使用に関する詳細な説明
  • JavaScript パッケージオブジェクト例の分析
  • JavaScript のラッパー オブジェクトの紹介
  • JavaScript パッケージングオブジェクトの概要
  • JavaScript 型付きラッパー
  • JavaScript 参照型の基本パッケージ型例の分析 [ブール値、数値、文字列]
  • JavaScript 型システムの基本データ型とパッケージ型
  • JavaScript 上級チュートリアル 5.6 基本的なパッケージングの種類 (詳細)
  • JavaScript の基本的なパッケージングの種類についての簡単な説明

<<:  Windows サーバー ファイルをローカルにバックアップする方法、Windows サーバー データ バックアップ ソリューション

>>:  Windows での MySQL の使用: 自動スケジュールバックアップの実装

推薦する

HTML の 5 種類のスペースの意味

HTML には、幅の異なる 5 つのスペース エンティティが用意されています。非改行スペース ( )...

Docker x509 の安全でないレジストリ問題を解決する

Docker をインストールした後、会社が構築したプライベート サーバー Harbor からプルしよ...

MySQLデータベース入門:データベースバックアップ操作の詳細な説明

目次1. 単一データベースのバックアップ2. 圧縮バックアップ3. マルチデータベースバックアップ4...

Vueのref属性の詳細な説明

要約するこの記事はこれで終わりです。皆さんのお役に立てれば幸いです。また、123WORDPRESS....

docker pullがリセットされる問題を解決する

この記事では、docker pull がリセットされる問題を解決する方法を紹介し、皆さんと共有します...

初心者のためのウェブサイト構築入門 - ウェブサイト構築に必要な条件とツール

今日は、初心者の次のような質問に答えます。学ぶ勇気さえあれば、自分のウェブサイトを構築するのは簡単で...

組み込み移植 docker エラー問題 (概要)

長い移植と情報検索の期間を経て、組み込みDockerの問題を解決することができました。インターネット...

DockerはMariaDBのサブライブラリとサブテーブル、および読み書き分離機能を実装します

目次1. はじめに2. 環境整備1. 基本環境3.Mysqlマスタースレーブ構成をインストールする1...

HTML での位置の使用に関する簡単な紹介

昨日 HTML を少し学んだばかりで、JD.com の検索バーを作るのが待ちきれませんでした。 作っ...

HTML チュートリアル: よく使われる HTML タグのコレクション (5)

導入された HTML タグは、必ずしも XHTML 仕様に完全に準拠しているわけではありません。実際...

ドキュメントの場所の比較

<br />2 年前に PPK が投稿した素晴らしいブログ記事では、contains()...

h1、h2、h3タグを適切に使用する

Web ページを作成する過程では、<h1>、<h2>、<h3> ...

dockerでifconfigが利用できない問題を解決する

最近、docker を学習していたときに、docker コンテナ内のネットワーク状態を照会するために...

nginx を使用した負荷分散モジュールの解釈

目次負荷分散に nginx を使用するための 2 つのモジュール:アップストリームはロードノードプー...

Node.js でのブレークポイント再開の実装

序文通常のビジネスニーズ: 写真、Excel などをアップロードします。結局のところ、数 MB のサ...