ホームページ > 記事 > ウェブフロントエンド > Javascriptコアの型、値、変数の読み取り_基礎知識
コンピューター プログラムの操作には、数値 3.14 やテキスト「hello world」などの値の操作が必要です。プログラミング言語では、表現および操作できる値のタイプをデータ型 ( type) の最も基本的なプログラミング言語。複数のデータ型をホストできるのが特徴です。プログラムは、将来の使用のために値を保存する必要がある場合、その値を変数に割り当てます (値を「保存」します)。変数は値の記号名であり、値への参照は名前によって取得できます。変数がどのように機能するかは、プログラミング言語の基本的な機能です。この章では、この章の内容を理解するために前のセクションを参照し、後でさらに詳しく説明します。
JavaScript データは、プリミティブ型とオブジェクト型の 2 つのカテゴリに分類されます
JavaScript の元のクラスには、数値、文字列、およびブール値が含まれます。この章には、JavaScript の数値、文字列、およびブール値に特化した別の章があります。 JavaScript には、null (空) と Unknown (未定義) という 2 つの特別なプリミティブ値もあります。これらは数値、文字列、またはブール値ではありません。これらはそれぞれ、独自の特別なタイプの一意のメンバーを表します。
JavaScript は、数値、文字列、ブール値、null、および未定義に加えてオブジェクトです。オブジェクトはプロパティのコレクションです。各属性は「名前と値のペア」で構成されます (値は、数値、文字列、オブジェクトなどのプリミティブ値にすることができます)。より特殊なオブジェクトの 1 つ (グローバル オブジェクトはミス 5 で紹介され、セクション 6 で詳しく説明されます)
通常の JavaScript オブジェクトは、「名前付きの値」の不要なコレクションです。 JavaScript は、番号付きの値の順序付けられたコレクションを表す特別なオブジェクト、つまり配列も定義します。 JavaScript は配列の特別な構文を定義します。 Make 配列には、通常のオブジェクトとは異なるいくつかの固有の動作特性があります。
JavaScript は特別なオブジェクト関数も定義します。関数は、実行可能コードが関連付けられたオブジェクトであり、実行可能コードを実行して操作の結果を返すために呼び出されます。配列と同様、関数は他のオブジェクトとは異なる動作をします。 JavaScript は、関数を使用するための特別な構文を定義します。 JavaScript 関数の場合。最も重要なことは、これらはすべて true 値であり、JavaScript はそれらを通常のオブジェクトのように扱うことができるということです。
関数が新しいオブジェクトを (new 演算子を使用して) 初期化する場合、それをコンストラクターと呼びます。各コンストラクターは、オブジェクトのクラス、つまりコンストラクターが初期化するオブジェクトのコレクションを定義します。クラスは、オブジェクト型のサブタイプとして考えることができます。配列クラスと関数クラスに加えて、JavaScript では他の 3 つの便利なクラスも定義されています。 Date は、日付を表すオブジェクトを定義します。 Regular (regExp) オブジェクトは正規表現を定義します。 error クラスは、JavaScript プログラムの実行時エラーと構文エラーを表すオブジェクトを定義します。独自のコンストラクターを定義することで、必要なクラスを定義できます。
JavaScript インタプリタには、メモリ上でガベージ コレクションを自動的に実行できる独自のメモリ管理メカニズムがあります。これは、プログラムがオンデマンドでオブジェクトを作成できるため、プログラマはこれらのオブジェクトの破棄やメモリのリサイクルについて心配する必要がありません。オブジェクトへの参照がなくなると、インタプリタはそのオブジェクトがもう役に立たないことを認識し、オブジェクトが占有しているメモリ リソースを自動的に再利用します。
JavaScript はオブジェクト指向言語です。大まかに言えば、これは、さまざまなタイプの値を操作するための関数をグローバルに定義する必要がないことを意味します。たとえば、配列 a 内の要素をソートするために、データ型自体で値を使用するメソッドを定義できます。 a sort() 関数を入力しますが、メソッド sort()
a.sort(); //sort(a) のオブジェクト指向バージョン
技術的には、JavaScript オブジェクトのみがメソッドを持つことができます。ただし、数値、文字列、ブール値にも独自のメソッドがあります。 JavaScriptではメソッドを持てない値はnullとunknownのみです。
JavaScriptの型はプリミティブ型とオブジェクト型に分けられ、さらにメソッドを持つことができる型とメソッドを持つことができない型に分けることができます。また、可変型と不変型に分けることもできます。変数型の値は変更できます。 オブジェクトと配列は変数型です。JavaScript プログラムはオブジェクトの属性値と配列要素の値を変更できます。
数値、ブール値、null、未定義は不変型です。たとえば、配列の内容を変更すること自体は意味がありません。文字列は文字の配列と考えることができ、変更可能であると考えることができます。ただし、JavaScript では文字列は不変です。文字列内の任意の位置のテキストにアクセスできますが、JavaScript には文字列のテキスト内容を変更するメソッドが提供されていません。
JavaScript は自由にデータ型変換を行うことができます。たとえば、プログラムが文字列を想定している場所で数値が使用されている場合、JavaScript は自動的に数値を文字列に変換します。ブール値が予期される場所で非ブール値が使用された場合、JavaScript はそれに応じて変換します。 「等価」のための JavaScript の柔軟な型取得および交換ルール
JavaScript 変数には型がありません。変数を宣言するには、var キーワードを使用して変数を割り当てることができます。 JavaScript は構文スコープを使用します。関数内で宣言されていない変数はグローバル変数と呼ばれ、JavaScript プログラム内のどこでも参照できます。
1. 数字
他のプログラミング言語とは異なり、JavaScript は整数値と浮動小数点値を区別しません。 JavaScriptにおける数値は浮動小数点値で表現されます。 JavaScript プログラム内で数値が直接出現する場合、それを数値リテラルと呼びます。JavaScript は複数の形式の数値リテラルをサポートします。 (注: 数値の直前にマイナス記号 (-) を追加すると、負の値が得られます。) ただし、マイナス記号は単項否定演算子です。 、数値リテラル文法の一部ではありません。 )
i 整数直接量
JavaScript で配列シーケンスを使用して 10 進整数を表現します
JavaScript は、10 進整数リテラルに加えて、16 進数メカニズム (16) を基底とする値も認識します。いわゆる 16 進数には「0X」または「0x」という接頭辞が付けられ、その後に 16 進数文字列の直接の量が続きます。 16 進値は、0 ~ 9 の数字と a(A) ~ f(F) の間の文字で構成されます。文字 a ~ f は 10 ~ 15 の数字を表します。 以下は 16 進整数リテラル
の例です。ECMAScript は 8 進数リテラルをサポートしていませんが、JavaScript の一部の実装では整数を 8 進数 (base 8) 形式で表現できます。 8 進リテラルは数値 0 で始まり、0 から 7 までの一連の数字が続きます。
JavaScript 実装には 8 進数のスカラーをサポートするものとサポートしないものがあるため、先頭に 0 を付けた整数のスカラーを使用しないことが最善です。結局のところ、現在の JavaScript 実装が 8 進数の解析をサポートしているかどうかを知る方法はありません。 ECMAScript 6 の厳密モードでは、8 進リテラルは明示的に禁止されています。
ii. 浮動小数点リテラル
浮動小数点リテラルには小数点を含めることができ、実数の従来の記述方法が使用されます。実数は、整数部、小数点、および小数部で構成されます。
さらに、指数表記を使用して浮動小数点リテラルを表すこともできます。つまり、実数の後に文字 E または e が続き、その後に正または負の符号が続き、その後に整数の指数が続きます。この数え方で表される値は、前の実数の指数乗に 10 を乗算したものです。
iii.javascript の算術演算
JavaScript プログラムは、言語によって提供される算術演算子を使用して数値演算を実行します。これらの演算子には、- * / および剰余 (除算後の剰余) 演算子 %
が含まれます。
JavaScript は、基本的な演算子に加えて、より複雑な算術演算もサポートしており、この複雑な演算は、Math オブジェクトのプロパティとして定義された関数と定数によって実装されます。
JavaScript の算術演算では、オーバーフロー、アンダーフロー、またはゼロ除算が発生した場合にエラーが報告されません。ただし、数値演算結果はJavaScriptで表現できる数値の上限を超え(オーバーフロー)、JavaScriptではinfintyで表現される特殊な無限値(infinty)の値となります。同様に、負の数値の値が JavaScript で表現できる負の数値の範囲を超える場合、結果は負の無限大となり、JavaScript では -Infinty で表されます。無限値は期待どおりに動作します。それらに基づく加算、減算、乗算、除算は無限大になります (符号は保持されます)
アンダーフローは、演算の結果が限りなくゼロに近く、JavaScript が表現できる最小値より小さい場合に発生する状況です。負の数値がアンダーフローすると、JavaScript は通常のゼロとほぼ同じである特別な値「負のゼロ」を返します。 JavaScript プログラマーが負のゼロを使用することはほとんどありません。
JavaScript では、正の無限大と数値以外の値を表すために使用されるグローバル変数 Infinaty と NaN が事前定義されており、ECMAScipt3 ではこれら 2 つの値を読み書きできます。 ECMAScript5 では、読み取り専用として定義することでこの問題を解決しています。 ECMAScipt3 の Number オブジェクトによって定義されるプロパティ値も読み取り専用です。次にいくつかの例を示します。
負のゼロの値も若干特殊であり、(JavaScript の厳密な等価性テストを使用して判断されても) 正のゼロと負のゼロに等しくなります。つまり、除数を除いて 2 つの値はほぼ同一です。 🎜>
JavaScript は IEEE-754 浮動小数点数表現 (ほとんどすべての最新のプログラミング言語で使用されています) を使用します。これは、1/2 1/8 や 1/1024 などの分数を正確に表現できる 2 進数表現です。残念ながら、特に金融計算でよく使用される分数は、すべて 1/10 や 1/100 などの小数です。 2 進数表現では 0.1 のような単純な数値を表現できません。
JavaScript の数値には十分な精度があります。 0.1 に近い値になることもありますが、この数値を正確に表現できないという事実により、いくつかの問題が生じます。
丸め誤差により、0.3 と 0.2 の間のおおよその差は、実際には 0.2 と 0.1 の間のおおよその差と等しくなりません (実際のシミュレーション環境では、0.3-0.2=0.099 999 999 999 999 98) この問題は当てはまりません。これは JavaScript に特有のものですが、2 進浮動小数点数を使用するすべてのプログラミング言語で発生することを理解することが重要です。また、上記のコードの x と y の値は互いに非常に近く、最終的な正しい値であることにも注意してください。この計算結果は、ほとんどのコンピューティング タスクに使用できます。この問題は、2 つの値が等しいかどうかを比較する場合にのみ発生します。
JavaScript の将来のバージョンでは、この問題を回避するために 10 進数タイプがサポートされる可能性がありますが、それまでは、重要な財務計算には大きな整数を使用することをお勧めします。たとえば、通貨単位ベースの操作には、10 進数の「ドル」の代わりに整数の「セント」を使用します。
iiiii.日付と時刻
JavaScript 言語のコアには、日付と時刻のオブジェクトを作成する Date() コンストラクターが含まれており、これらの日付オブジェクトのメソッドは、日付計算用の単純な API を提供します。日付オブジェクトは、数値のような基本的なデータ型にはできません。
2. テキスト
文字列は、通常、Unicode 文字セットに由来する、不変の順序付けられた 16 ビット値のシーケンスです。 JavaScript は文字列型を通じてテキストを表します。文字列の長さは、文字列に含まれる 16 ビット値の数です。 Javascript 文字列 (およびその配列) には 0 から始まるインデックスが付けられます。空の文字列の長さは 0 であり、JavaScript には単一の文字を表す「文字型」はありません。 16 ビット値を表すには、それを文字列変数に代入するだけです。この文字列の長さは 1 です。
文字セット、内部コード、JavaScript 文字列
JavaScript は、UTF-16 でエンコードされた Unicode 文字セットを使用します。JavaScript 文字列は、シリアル化されていない 16 ビット値のセットで構成されます。最も一般的に使用される Unicode 文字は 16 ビットの内部コードで表され、16 ビット文字として表現できない Unicode 文字は、UTF-16 エンコード規則に従います。つまり、2 つの 16 ビット値を使用します。はシーケンス (「サロゲート ペア」とも呼ばれます) として表されます。これは、長さ 2 の JavaScript 文字列 (2 つの 16 ビット値) が Unicode 文字を表す可能性があることを意味します。
JavaScript で定義されているさまざまな文字列操作メソッドはすべて、文字ではなく 16 ビット値を操作し、サロゲート ペアは個別に処理されません。同様に、JavaScript は文字列に対して標準化された処理を実行しません。文字列が正当な UTF-16 形式であるという保証はありません
i 文字列リテラル
JavaScript プログラムの文字列リテラルは、一重引用符または二重引用符で囲まれた文字シーケンスです。一重引用符で区切られた文字列には二重引用符を含めることができ、二重引用符で区切られた文字列には一重引用符を含めることもできます。以下に文字列リテラルの例をいくつか示します。
ECMAScript3 では、文字列リテラルは 1 行で記述する必要がありますが、ECMAScript5 では、文字列リテラルを複数の行に分割することができ、各行はバックスラッシュ ()、バックスラッシュ、行終端文字で終わる必要があります。文字列リテラルの内容。それらを一緒にしたい場合は、使用できます エスケープ文字。
文字列を区切るために一重引用符を使用する場合は、英語の略語とすべての書式設定に特に注意する必要があることに注意してください。英語のアポストロフィと一重引用符は同じ文字であるため、バックスラッシュ () エスケープを使用する必要があります。
ii エスケープ文字
JavaScript 文字列では、バックスラッシュ () には特別な目的があります。たとえば、n は改行文字を表すエスケープ文字です。
JavaScript の組み込み関数の 1 つは文字列の連結です。文字列で演算子を使用することは、文字列の連結を意味します。たとえば
s.length
長さ属性に加えて、文字列には呼び出すことができる多くのメソッドも用意されています。
JavaScript では、replace() や toUpperCase() などのメソッドは新しい文字列を返し、元の文字自体は変更されません。
ECMAScript では、charAt() メソッドを使用するだけでなく、文字を読み取り専用の配列として扱うことができ、角括弧を使用して文字列内の個々の文字にアクセスすることもできます。 (16ビット値)
Foxfire はずっと前からこの方法で文字列インデックス付けをサポートしており、ほとんどの最新のブラウザ (IE を除く) は Mozailla の足跡をたどり、ECMAScript が形になる前にこの機能を完成させました
iiii パターンマッチング
JavaScript は、テキスト パターン マッチングを表すオブジェクトの作成に使用される RegExp() コンストラクターを定義します。これらのパターンは、JavaScript Caiyang Perl の正規表現構文である「正規表現」と呼ばれます。 String オブジェクトと RegExp オブジェクトは両方とも、正規表現を使用したパターン マッチング、検索および置換の関数を定義します。
RegExp オブジェクトは、Date と同様に、この言語の基本的なデータ型ではなく、実用的な API を備えた単なる特殊なオブジェクトです。正規表現の構文は複雑で、API は豊富です。詳しくは第10章で紹介します。 RegExp は強力で一般的に使用されるテキスト処理ツールです。これは概要にすぎません。
RegExp はこの言語の基本的なデータ型ではありませんが、それでも直接記述する方法があり、JavaScript で直接使用できます。 2 つのスラッシュ間のテキストは、正規表現のリテラルを形成します。 2 番目のスラッシュの後に 1 つ以上の文字を続けることもできます。一致するパターンの意味を変更するために使用されます。例:
RegExp オブジェクトは多くの便利なメソッドを定義しており、文字列にも RegExp パラメータを受け入れることができるメソッドがあります。例:
3.ブール値
ブール値は、true または false、on または off を指します。この型には、予約語 true または false の 2 つの値のみがあります。
JavaScript の比較ステートメントの結果は通常、ブール値です。たとえば
a==4
このコードは、変数 a の値が 4 に等しいかどうかを検出するために使用されます。等しい場合、値は true、そうでない場合、値は false
ブール値は通常、JavaScript の if/else ステートメントなどの JavaScript 制御ステートメントで使用されます。ブール値が true の場合はロジックの最初の部分が実行され、false の場合は別のコードが実行されます。
など任意の JavaScript 値をブール値に変換できます。次の値は false に変換されます。
すべてのオブジェクト (配列) を含む他のすべての値は true、false に変換され、JavaScript がブール値の使用を想定している場合、false に変換できる上記の 6 つの値は「false 値」と呼ばれることがあります。 false 値は false として扱われ、true 値は true として扱われます
変数 o がオブジェクトまたは null であることを追加して、if ステートメントを使用して o が非 null 値であるかどうかを検出できます。
if(o!==null)...
不等演算子「!==」は o と null を比較し、結果は true または false になります。ここでの比較ステートメントは最初は無視できます。null は false 値で、オブジェクトは true 値です。
もし(o)...
最初のケースでは、o が null でない限り、if の後のコードが実行されます。2 番目のケースの制限はそれほど厳しくありません。この if は、o が false または任意の false 値 (null または unfined など) ではない場合にのみ実行されます。
Boolean には toString() メソッドが含まれているため、このメソッドを使用して文字列を "true" または "false" に変換できますが、この重要ではない API 以外に 3 つの重要なメソッドが含まれていません。 1 つのブール演算子。
&& 演算子、|| 演算子、および単項演算子「!」は、true 値が false を返す場合、false 値は true を返します。
4.null および未定義
Null は JavaScript 言語のキーワードであり、null の場合は typeof() 演算が実行され、オブジェクトが返されます。これは「非オブジェクト」を意味します。しかし実際には、通常、null はその自由型の唯一のメンバーとみなされます。 「値のない」数値、文字列、オブジェクトを表すことができます。ほとんどのプログラミング言語には JavaScript などの null が含まれており、null または nil についてはよく知られているかもしれません。
JavaScript には、値の空きを示す 2 番目の値もあります。より深い「NULL 値」を表すために使用されます。変数の値です。変数が初期化されていないことを示します。オブジェクトのプロパティまたは配列要素の値をクエリして未定義を返す場合、それはプロパティまたは要素が存在しないことを意味します。 unknown は事前定義されたグローバル変数 (null とは異なり、キーワードではありません) であり、その値は未定義です。 typeof を使用して未定義の型をテストすると、「未定義」が返され、この値がこの型の唯一のメンバーであることを示します。
null と unknown は異なりますが、どちらも「値の欠如」を表し、多くの場合、この 2 つは交換可能です。等価演算子「==」は、2 つが等しいとみなします (これらを区別するには、厳密な等価演算子「===」を使用する必要があります)。値がブール型であると予想される場合、その値は false になります。 false に似ています。 null と unknown にはどちらもプロパティやメソッドが含まれません。実際、「.」と「[]」を使用してこれら 2 つの値のメンバーまたはメソッドにアクセスすると、型エラーが発生します。
これらを変数またはプロパティとしてコピーするか、関数に渡す場合は、未定義はシステム レベルの予期しない値またはエラーのような値の空きを表し、null はプログラム レベルの通常の値または期待される値の空きを表すと考えることができます。パラメータの場合、null が最良の選択です。
5. グローバルオブジェクト
前のセクションでは、JavaScript 要素のタイプとプリミティブ値について説明しました。オブジェクトの種類 - オブジェクト、配列、関数/しかし、ここで明確にしなければならない非常に重要なオブジェクトのクラスがあります: グローバル オブジェクト
グローバル オブジェクトは JavaScript で重要な役割を果たします。グローバル オブジェクトのプロパティは、グローバルに定義されたシンボルです。 JavaScript プログラムを直接使用できます。 JavaScript インタープリターが開始されると、新しいグローバル オブジェクトが作成され、それに定義済みの初期プロパティのセットが与えられます。
未定義の Infinty や NaN などのグローバル プロパティ
isNaN()、parseInt()、eval()などのグローバル関数
Date()、RegExp()、String()、Object()、Array() などのコンストラクター
Math や JSON などのグローバル オブジェクト
グローバル オブジェクトの初期プロパティは予約語ではありませんが、予約語として扱う必要があります。
コードの最上位レベル (関数内にない JavaScript コード) では、javascript キーワードを通じてグローバル オブジェクトを参照できます。
var global = this; //グローバル オブジェクトを参照するグローバル変数を定義します。
クライアント側 JavaScript では、ウィンドウ オブジェクトはグローバル オブジェクトとして機能します。このグローバル ウィンドウ オブジェクトは、グローバル コア プロパティを参照するためにこれを置き換えることができます。ただし、Web ブラウザーと対話型 JavaScript 用の他のグローバル プロパティも定義します。
最初に作成されたとき、グローバル オブジェクトは JavaScript で定義済みのグローバル値をすべて定義します。この特別なオブジェクトには、プログラムに定義されたグローバル値も含まれます。コードでグローバル変数が宣言されている場合。このグローバル変数はグローバル オブジェクトのプロパティです。
6. オブジェクトのパッケージ化
JavaScript オブジェクトは複合値です。プロパティまたは名前付き値のコレクションです。属性値は「.」を通じて参照され、属性値が関数の場合はメソッドとなり、オブジェクト o 内のメソッドは o.m() を通じてディスパッチされます。
文字列にもプロパティとメソッドがあることがわかります。
文字列はオブジェクトではないのに、なぜ属性があるのでしょうか? string のプロパティが参照されている限り、JavaScript は new String を呼び出して文字列の値をオブジェクトに変換します。このオブジェクトは string のメソッドを継承します。プロパティ参照を処理するために使用されます。新しい属性が参照されると。参照が終了すると、新しく作成されたオブジェクトは破棄されます。 (この一時オブジェクトは実際には作成または破棄されませんが、プロセスは次のようになります。)
文字列と同様、数値やブール値にも独自のメソッドがあり、Number() および Boolean() コンストラクターを通じて一時オブジェクトを作成します。これらのメソッドの呼び出しはすべて、この一時オブジェクトから行われます。 (null と unknown はラップされたオブジェクトではないため、それらのプロパティにアクセスすると型エラーが発生します)
次のコードを見て、その実行プロセスについて考えてください
このコードを実行すると、t の値は未定義になります。コードの 2 行目では、一時的な文字列オブジェクトが作成され、len の値が 4 に設定され、コードの 3 行目では、元の (変更されていない) オブジェクトが使用されます。 ) ) 新しい文字列オブジェクトを作成し、len プロパティを読み取ろうとします。
この属性は当然存在せず、結果が未定義であることを示します。このコードは、文字列、配列、およびブール値の属性値 (またはメソッド) を読み取るときに、オブジェクトのように動作することを示しています。その属性に値を割り当ててみます。この操作は無視され、変更は一時オブジェクトに対してのみ行われます。この一時オブジェクトは保持されません。
String()、Number()、Boolean() コンストラクターを使用してラッパー オブジェクトを明示的に作成できることに注意してください。
Javascript は必要に応じてラッパーをプリミティブ値に変換するため、上記のコードのオブジェクト S N B は、常にではありませんが、多くの場合 s n b と同じように動作します。「==」演算子は元の値とそのラップされた値を変換します。オブジェクトは同等のものとして扱われます。
しかし、「===」演算子はこれらを等しくないものとして扱い、typeof 演算子は元の値とそれがラップするオブジェクトの違いを確認できます。
7. 不変のプリミティブ値と可変のオブジェクト参照。
JavaScript のプリミティブ値 (未定義の null ブール値、数値、文字列) はオブジェクト (配列や関数を含む) とは根本的に異なります。プリミティブ値を変更 (または変更) できるメソッドはありません。これは明らかに数値とブール値に当てはまります。数値自体の値を変更することは意味がありませんが、文字の配列のように見える文字列の場合はそれほど明白ではありません。文字列内の文字は、指定されたインデックスによって変更できることが期待されます。実際、JavaScript ではこれを禁止しています。 string 内のすべてのメソッドは変更された文字列を返すように見えますが、実際には新しい文字列を返します。
元の値の比較は、値が等しい場合にのみ値の比較となります。これは、数値、ブール値、null、未定義の場合には少し難しく思えますが、これらを比較する他に方法はありません。繰り返しますが、文字列の場合はあまり明らかではありません。2 つの別々の文字列を比較する場合、JavaScript は、各インデックスの長さと文字が等しい場合にのみ、それらが等しいとみなします。
オブジェクトの比較は値の比較ではありません。2 つのオブジェクトに同じ属性と同じ値が含まれている場合でも、それらは等しくなく、完全に等しいインデックス要素を持つ 2 つの配列は等しくありません
私たちは通常、JavaScript の基本型と区別するためにオブジェクト参照型と呼びます。用語によれば、オブジェクトは参照であり、オブジェクトの比較は参照の比較であり、それらが同じベース オブジェクトを使用する場合にのみ等しくなります。
上で見たコードと同様に、オブジェクト (または配列) を変数に代入することは、参照値を割り当てるだけです。オブジェクト自体は一度もコピーされません。
オブジェクトまたは配列のコピーを取得したい場合は、オブジェクトのすべてのプロパティまたは配列のすべての要素を明示的にコピーする必要があります。次の例では、ループを通じて配列のコピーを完了します。
同様に、2 つの個体または配列を比較したい場合は、それらの属性または要素を比較する必要があります。次のコードは、配列を比較する関数を定義します。
8. 型変換
JavaScript の値の型は非常に柔軟です。これはブール値ですでに説明しました。JavaScript がブール値を期待する場合、任意の型の値を指定できます。 JavaScript は必要に応じて型自体を変換します。一部の値(真の値)は true に変換され、他の値(偽の値)は false に変換されます。他の型についても同様です。 JavaScript が文字列を予期している場合、指定された値を文字列に変換します。 JavaScript が配列を期待する場合、指定された値を数値に変換します (変換結果が無意味な場合は NaN を返します)。いくつかの例は次のとおりです:
次の表は、JavaScript で型変換を実行する方法を説明しています。太字は、あなたを驚かせる可能性のあるタイプを強調表示しています。空のセルは、不必要で実行されない変換を表します。
値 | 文字列に変換 | 番号 | ブール値 | オブジェクト |
未定義 null |
「未定義」 「ヌル」 |
ナン 0 |
偽 false |
TypeError をスローします TypeError | をスローします
true false |
"ture" "false" |
1 0 |
new Boolean(true) new Boolean(false) |
|
""(空字符串) "1.2"(非空,数字) "one"(非空,非数字) |
0 1.2 NaN |
false true 本当 |
新しい文字列("") new String("1.2") new String("one") |
|
0 -0 なな インフィニティ -インフィニティ 1(無限大、非ゼロ) |
"0" 「0」 「NaN」 「インフィニティ」 "-無限大" "1" |
false 偽 偽 本当 本当 本当 |
新しい番号(0); 新しい数値(-0); 新しい数値(NaN) 新しい数字(無限大) 新しい数値(-無限大) 新しい番号(1) |
|
{}(任意のオブジェクト) [](任意の配列) [9](1つの数値要素) ['a'](他の配列) 関数(){}(arbitrary function) |
Refer to the third section of this section "" "9" Use join() method Please refer to the third section of this section |
Refer to the third section of this section 0 9 NaN NaN |
true true true true true |
The conversion from original value to original value mentioned in the above table is relatively simple. We have already discussed the conversion to Boolean value in the third section of this article. The conversion of all primitive values to strings is also clearly defined. The conversion to numbers is more subtle. Strings represented as numbers can be converted directly to numbers, with spaces at the beginning and end allowed. However, any non-null characters at the beginning and end will not be regarded as part of the number, causing the result of the string to be NaN. There are some number conversions that look strange: true is converted to 1, false, and the empty string "" is converted to 0.
The conversion of primitive values to objects is also very simple, primitive values