JavaScriptのデータ型
JavaScript データ型
データ型
JavaScript には、未定義、Null、ブール、数値、文字列の 5 つの単純なデータ型 (基本データ型とも呼ばれます) があります。複雑なデータ型もあります。オブジェクトは、基本的に順序付けされていない名前と値のペアで構成されます。
typeof 演算子
JavaScript は緩やかに型指定されているため、特定の変数のデータ型を検出する方法が必要です。typeof はプロバイダー側の情報を提供する演算子です。値に対して typeof 演算子を使用すると、次の文字列のいずれかが返されます。
● "unknown" - 値が未定義の場合
● "boolean" - 値がブール値の場合
● "string" — —この値が文字列の場合;
● "number"—この値が数値の場合;
● "object"—この値がオブジェクトまたは null の場合;
● "function"—Ifこの値は関数です。
未定義型
未定義型は値を 1 つだけ持ち、それが特別な unknown です。変数が var を使用して宣言されているが初期化されていない場合、変数の値は未定義になります。例:
var message;
alert(message == unknown) //true
Null 型
Null 型は 2 番目です。値が 1 つだけあるデータ型。この特別な値は null です。論理的な観点から見ると、null 値は null オブジェクト ポインターを表します。これが、typeof 演算子を使用して null を検出するときに「object」が返される理由です。たとえば、次のようになります。 ; // "object"
定義した変数を将来オブジェクトの保存に使用する場合は、変数を別の値ではなく null に初期化するのが最善です。このようにして、null 値が直接検出されている限り、対応する変数がオブジェクトへの参照を保存しているかどうかを知ることができます。例:
if(car != null)
{ .
Alert(unknown == null); //true
ブール型
この型には、true と false の 2 つのリテラル値しかありません。これら 2 つの値は数値としては同じものではないため、true が 1 に等しいとは限らず、false が 0 に等しいとは限りません。
ブール型のリテラル値は 2 つだけですが、JavaScript のすべての型の値は、これら 2 つのブール値と同等の値を持ちます。値を対応するブール値に変換するには、次のように型変換関数 Boolean() を呼び出すことができます。
var message = 'Hello World' var messageAsBoolean = Boolean(message); この例では、文字列メッセージはブール値に変換され、messageAsBoolean 変数に格納されます。 Boolean() 関数は、任意のデータ型の値に対して呼び出すことができ、常にブール値を返します。戻り値が true か false になるかは、変換対象の値のデータ型とその実際の値に依存します。次の表に、さまざまなデータ型とそのオブジェクトの変換規則を示します。
これらの変換ルールは、フロー制御ステートメント (if ステートメントなど) を理解し、対応するブール変換を自動的に実行するために非常に重要です。例:
var message = 'Hello World'; if(message) { alert("Value is true"); }
この例を実行すると、文字列メッセージが自動的に変換されるため、警告ボックスが表示されます。対応するブール値 (true) に変換します。このブール変換は自動的に実行されるため、フロー制御ステートメントでどの変数が使用されているかを正確に知ることが重要です。
NaN 自体には 2 つの優れた特徴があります。まず、NaN を伴う演算 (NaN/10 など) は NaN を返すため、複数ステップの計算で問題が発生する可能性があります。第 2 に、NaN は、NaN 自体を含め、どの値とも等しくありません。たとえば、次のコードは false を返します。
alert(NaN == NaN); //false
JavaScript には isNaN() 関数があり、この関数は任意の型のパラメーターを受け入れます。 "数値ではありません" "。 isNaN() は値を受け取ると、その値を数値に変換しようとします。数値ではない一部の値は、文字列「10」やブール値など、数値に直接変換されます。数値に変換できない値があると、この関数は true を返します。例:
alert(isNaN(NaN)); //true alert(isNaN(10)); //false(10是一个数值) alert(isNaN("10")); //false(可能被转换为数值10) alert(isNaN("blue")); //true(不能被转换为数值) alert(isNaN(true)); //false(可能被转换为数值1)
数値以外の値を数値に変換できる関数は 3 つあります: Number()、parseInt()、parseFloat()。最初の関数である変換関数 Number() は任意のデータ型に使用できますが、他の 2 つの関数は特に文字列を数値に変換するために使用されます。これら 3 つの関数は、同じ入力に対して異なる結果を返します。
Number()関数の変換ルールは以下の通りです
●ブール値の場合はtrue、falseはそれぞれ1、0に置き換えられます
●数値の場合はそのまま渡されますで返されます
● null値の場合は0を返します
● 未定義の場合はNaNを返します
● 文字列の場合は次の規則に従います:
○ 文字列に数字のみが含まれる場合は変換しますつまり、「1」は 1 になり、「123」は 123 になり、「011」は 11 になります (先頭の 0 は無視されます)
○ 文字列に次のような有効な浮動小数点形式が含まれている場合"1.1"、対応する浮動小数点数に変換します (同様に、先頭の 0 も無視されます)
○ 文字列に "0xf" などの有効な 16 進形式が含まれている場合は、同じ 10 進整数値に変換しますサイズ
○ If 文字列が空の場合は0に変換
○ 文字列に上記形式以外の文字が含まれている場合はNaNに変換
● オブジェクトの場合は、その文字列のvalueOf()メソッドを呼び出すオブジェクトの場合、戻り値を前述のルールに従って変換します。変換の結果が NaN の場合、オブジェクトの toString() メソッドが呼び出され、返された文字列値が前述の規則に従って変換されます。
var num1 = Number("Hello World"); //NaN var num2 = Number(""); //0 var num3 = Number("000011"); //11 var num4 = Number(true); //1
Number() 関数は文字列を変換する場合には複雑で不合理であるため、整数を処理する場合には parseInt() 関数がよく使用されます。 parseInt() 関数が文字列を変換する場合、文字列が数値パターンに準拠しているかどうかに大きく依存します。最初の非スペース文字が見つかるまで、文字列内の先頭のスペースは無視されます。最初の文字列が数字または負符号でない場合、parseInt() は NaN を返します。つまり、parseInt() を使用して空の文字列を変換すると NaN が返されます。最初の文字が数字の場合、praseInt() は、後続の文字がすべて解析されるか、数字以外の文字が検出されるまで、2 番目の文字の解析を続けます。たとえば、小数点は有効な数字ではないため、「1234blue」は 1234 に変換され、「22.5」は 22 に変換されます。
文字列の最初の文字が数字の場合、parseInt() はさまざまな整数形式 (つまり、10 進数、8 進数、16 進数) も認識できます。 parseInt() 関数の変換規則をよりよく理解するために、ここにいくつかの例を示します
var num1 = parseInt("1234blue"); //1234 var num2 = parseInt(""); //NaN var num3 = parseInt("0xA"); //10(十六进制) var num4 = parseInt("22.5"); //22 var num5 = parseInt("070"); //56(八进制) var num6 = parseInt("70"); //70 var num7 = parseInt("10",2); //2(按二进制解析) var num8 = parseInt("10",8); //8(按八进制解析) var num9 = parseInt("10",10); //10(按十进制解析) var num10 = parseInt("10",16); //16(按十六进制解析) var num11 = parseInt("AF"); //56(八进制) var num12 = parseInt("AF",16); //175
parseInt() 関数と同様に、parseFloat() も最初の文字 (位置 0) から始めて各文字を解析します。そして、文字列の終わりまで、または無効な浮動小数点数値文字が見つかるまで解析されます。つまり、文字列の最初の小数点は有効ですが、2 番目の小数点は無効であるため、それ以降の文字列は無視されます。たとえば、「22.34.5」は 22.34 に変換されます。
parseFloat() と parseInt() の 2 番目の違いは、先頭のゼロを常に無視することです。 parseFloat() の値は 10 進数値を解析するため、2 番目のパラメーターで基数を指定する必要はありません。 String 型は、0 個以上の 16 ビット Unicode 文字で構成される文字シーケンス、つまり文字列を表すために使用されます。文字列は一重引用符 (') または二重引用符 (") で表すことができます。
var str1 = "Hello"; var str2 = 'Hello';
任意の文字列の長さは、その length 属性にアクセスすることで取得できます
値を文字列に変換するには 2 つの方法があります。1 つは、ほぼすべての値に含まれる toString() メソッドです。 ageAsString = age.toString(); //String "11"
var found = true; var foundAsString = found.toString(); //String "true"
りー
この例からもわかるように、toString()メソッドはbaseを指定することで出力値を変更します。値 10 は、出力時に基数に応じてさまざまな数値形式に変換できます。
変換する値がnullか未定義かわからない場合は、変換関数String()を使用することもできます。この関数は、任意の型の値を文字列に変換できます。 String() 関数は次の変換規則に従います:
● 値に toString() メソッドがある場合、そのメソッドを (パラメーターなしで) 呼び出し、対応する結果を返します
● 値が null の場合は、「null」を返します
●If 値が未定義の場合は「未定義」を返す
var num1 = parseFloat("1234blue"); //1234 var num2 = parseFloat("0xA"); //0 var num3 = parseFloat("22.5"); //22.5 var num4 = parseFloat("22.34.5"); //22.34 var num5 = parseFloat("0908.5"); //908.5
オブジェクト型
オブジェクトは実際にはデータと関数の集合です。オブジェクトは、作成するオブジェクトのタイプの名前を続けて new 演算子を実行することによって作成できます。カスタム オブジェクトを作成するには、オブジェクト型のインスタンスを作成し、それにプロパティやメソッドを追加します。
var o = new Object();
Object のすべてのインスタンスには次のプロパティとメソッドがあります:
● コンストラクター - 現在のオブジェクトの作成に使用される関数を保持します
● hasOwnProperty(propertyName) - for指定されたプロパティは、(インスタンスのプロトタイプではなく) 現在のオブジェクト インスタンスに存在します。このうち、パラメータとしてのプロパティ名 (propertyName) は文字列形式で指定する必要があります (例: o.hasOwnProperty("name"))
● isPrototypeOf(object) - 受信したオブジェクトが別のオブジェクト Prototype
● propertyIsEnumerable(propertyName) - for-in ステートメントを使用して指定されたプロパティを列挙できるかどうかを確認するために使用されます
● toString() - オブジェクトの文字列表現を返します
● valueOf() - A を返しますオブジェクトの文字列、数値、またはブール表現。通常は toString() メソッドの戻り値と同じです。