ホームページ > 記事 > ウェブフロントエンド > JavaScriptのデータ型
データ型
JavaScript には 5 つの単純なデータ型 (基本データ型とも呼ばれます) があります: 未定義、Null、ブール、数値、文字列です。複雑なデータ型もあります。オブジェクトは、基本的に順序のない名前と値のペアで構成されます。
Typeof 演算子
JavaScript は緩やかに型指定されているため、指定された変数のデータ型を検出する方法が必要です。typeof はプロバイダー側の情報を提供する演算子です。値に対して typeof 演算子を使用すると、次のいずれかの文字列が返されます。
● "unknown" - 値が未定義の場合
● "boolean" - 値がブール値の場合
● "string" — — 値が文字列の場合;
● 「数値」—値が数値の場合;
● 「関数」—値がオブジェクトまたは null の場合;値は関数です。
未定義型
未定義型には、特別な未定義という値が 1 つだけあります。 var を使用して変数を宣言するが初期化しない場合、この変数の値は未定義になります。例:
var message;
alert(message == unknown) //true
Null 型
Null 型は、 Second 値を 1 つだけ持つデータ型。この特別な値は null です。論理的な観点から見ると、null 値は null オブジェクト ポインターを表します。これが、typeof 演算子を使用して null を検出するときに「object」が返される理由です。たとえば、次のようになります。 ; // "object"
定義した変数を将来オブジェクトを保持するために使用する場合は、変数を別の値ではなく null に初期化することをお勧めします。このようにして、null 値を直接検出することで、対応する変数がオブジェクトへの参照を保存したかどうかを知ることができます。たとえば、次のようになります。
if (car != null)
{
実際、未定義の値は null 値から導出されるため、ECMA-262 は等価性テストが true を返すと規定しています。
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(message) {
この例を実行すると、文字列メッセージが対応するブール値 (true) に自動的に変換されるため、警告ボックスが表示されます。このブール変換は自動的に実行されるため、フロー制御ステートメントでどの変数が使用されているかを正確に知ることが重要です。 数字型この型は整数と浮動小数点値を表すために使用され、特別な値である NaN (Not a Number) もあります。この値は、値を返すはずのオペランドが値を返さないことを示すために使用されます (エラーがスローされないように)。たとえば、他のプログラミング言語では、数値をゼロで除算するとエラーが発生し、コードの実行が停止します。ただし、JavaScript では、0 で割った値は NaN を返すため、他のコードの実行には影響しません。
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"));数値10に変換可能
alert(isNaN("blue")); //true(数値に変換不可)
alert(isNaN(true)); //false(数値1に変換可能) )
はい、Number()、parseInt()、parseFloat() の 3 つの関数で数値以外の値を数値に変換できます。最初の関数である変換関数 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(""); //11
var num4 = Number (true ; 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(""); var num3 = parseInt("0xA"); //10 (16 進数)
var num4 = parseInt("22.5"); ; var num5 = parseInt("70"); var num6 = parseInt("10",2); // 2 (バイナリで解析) format)
var num8 = parseInt("10",8); // 8 (8 進形式で解析)
var num9 = parseInt("10",10); // 10 (10 進形式で解析)
var num10 = parseInt("10",16); var num10 = parseInt("10",16); //56 (8 進数) var num12 = parseInt("AF",16); /175
parseInt() 関数と同様に、parseFloat() も最初の文字 (位置 0) から始めて各文字を解析します。そして、文字列の終わりまで、または無効な浮動小数点数値文字が見つかるまで解析されます。つまり、文字列の最初の小数点は有効ですが、2 番目の小数点は無効であるため、それ以降の文字列は無視されます。たとえば、「22.34.5」は 22.34 に変換されます。
parseFloat() と parseInt() の 2 番目の違いは、先行ゼロを常に無視することです。 parseFloat() の値は 10 進数値を解析するため、第 2 引数で基数を指定する用途はありません。
var num1 = parseFloat("1234blue"); //1234
var num2 = parseFloat("0xA"); //0
var num4 = parseFloat(" 22.34.5"); //22.34
var num5 = parseFloat("0908.5"); //908.5 String型
String型は、0個以上の16ビットUnicode文字で構成される文字列を表すために使用されます。それは文字列です。文字列は一重引用符 (') または二重引用符 (") で表すことができます。
var str1 = "Hello";
var str2 = 'Hello';
値を文字列に変換するには、2 つの方法があります。1 つは、ほぼすべての値が持つ toString() メソッドです。
var found = true;
var foundAsString = found.toString(); //String "true"アラート(num.toString()); //"10"
アラート(num.toString(2)); //"1010"
アラート(num.toString(8)) ; //"12"
alert(num.toString(10)); //"10"
alert(num.toString(16)); //"a"
● 値が null の場合は、「null」を返します
● 値が未定義の場合は、「未定義」を返します
var value1 = 10;
var value2 = true ;
var value4;
alert(String(value1)) //"10"alert(String(value2)); //"true"
alert(String(value3)); "null"alert(String(value4)); //"未定義"
オブジェクトタイプオブジェクトは実際にはデータと関数のコレクションです。オブジェクトは、作成するオブジェクトのタイプの名前を続けて new 演算子を実行することによって作成できます。カスタム オブジェクトを作成するには、オブジェクト型のインスタンスを作成し、それにプロパティやメソッドを追加します。
var o = new Object();
Object のすべてのインスタンスには、次のプロパティとメソッドがあります:
● コンストラクター - 現在のオブジェクトの作成に使用される関数を保持します
● hasOwnProperty(propertyName) - for指定されたプロパティは、(インスタンスのプロトタイプではなく) 現在のオブジェクト インスタンスに存在します。このうち、パラメータとしてのプロパティ名 (propertyName) は文字列形式で指定する必要があります (例: o.hasOwnProperty("name"))
● isPrototypeOf(object) - 受信したオブジェクトが別のオブジェクトのプロトタイプ
● propertyIsEnumerable(propertyName) - for-in ステートメントを使用して指定されたプロパティを列挙できるかどうかを確認するために使用されます
● toString() - オブジェクトの文字列表現を返します
● valueOf() - A を返しますオブジェクトの文字列、数値、またはブール表現。通常は toString() メソッドの戻り値と同じです。