JavaScriptのデータ型
JavaScript データ型
データ型
JavaScript には、未定義、Null、ブール、數(shù)値、文字列の 5 つの単純なデータ型 (基本データ型とも呼ばれます) があります。複雑なデータ型もあります。オブジェクトは、基本的に順序付けされていない名前と値のペアで構(gòu)成されます。
typeof 演算子
JavaScript は緩やかに型指定されているため、特定の変數(shù)のデータ型を検出する方法が必要です。typeof はプロバイダー側(cè)??の情報を提供する演算子です。値に対して typeof 演算子を使用すると、次の文字列のいずれかが返されます。
● "unknown" - 値が未定義の場合
● "boolean" - 値がブール値の場合
● "string" — —この値が文字列の場合;
● "number"—この値が數(shù)値の場合;
● "object"—この値がオブジェクトまたは null の場合;
● "function"—Ifこの値は関數(shù)です。
未定義型
未定義型は値を 1 つだけ持ち、それが特別な unknown です。変數(shù)が var を使用して宣言されているが初期化されていない場合、変數(shù)の値は未定義になります。例:
var message;
alert(message == unknown) //true
Null 型
Null 型は 2 番目です。値が 1 つだけあるデータ型。この特別な値は null です。論理的な観點から見ると、null 値は null オブジェクト ポインターを表します。これが、typeof 演算子を使用して null を検出するときに「object」が返される理由です。たとえば、次のようになります。 ; // "object"
定義した変數(shù)を?qū)恁芝弗Д趣伪4妞耸褂盲工雸龊悉?、変?shù)を別の値ではなく null に初期化するのが最善です。このようにして、null 値が直接検出されている限り、対応する変數(shù)がオブジェクトへの參照を保存しているかどうかを知ることができます。例:
if(car != null)
{ .
Alert(unknown == null); //true
ブール型
この型には、true と false の 2 つのリテラル値しかありません。これら 2 つの値は數(shù)値としては同じものではないため、true が 1 に等しいとは限らず、false が 0 に等しいとは限りません。
ブール型のリテラル値は 2 つだけですが、JavaScript のすべての型の値は、これら 2 つのブール値と同等の値を持ちます。値を?qū)潖辘工毳蜘`ル値に変換するには、次のように型変換関數(shù) Boolean() を呼び出すことができます。
var message = 'Hello World' var messageAsBoolean = Boolean(message); この例では、文字列メッセージはブール値に変換され、messageAsBoolean 変數(shù)に格納されます。 Boolean() 関數(shù)は、任意のデータ型の値に対して呼び出すことができ、常にブール値を返します。戻り値が true か false になるかは、変換対象の値のデータ型とその実際の値に依存します。次の表に、さまざまなデータ型とそのオブジェクトの変換規(guī)則を示します。
これらの変換ルールは、フロー制御ステートメント (if ステートメントなど) を理解し、対応するブール変換を自動的に実行するために非常に重要です。例:
var message = 'Hello World'; if(message) { alert("Value is true"); }
この例を?qū)g行すると、文字列メッセージが自動的に変換されるため、警告ボックスが表示されます。対応するブール値 (true) に変換します。このブール変換は自動的に実行されるため、フロー制御ステートメントでどの変數(shù)が使用されているかを正確に知ることが重要です。
NaN 自體には 2 つの優(yōu)れた特徴があります。まず、NaN を伴う演算 (NaN/10 など) は NaN を返すため、複數(shù)ステップの計算で問題が発生する可能性があります。第 2 に、NaN は、NaN 自體を含め、どの値とも等しくありません。たとえば、次のコードは false を返します。
alert(NaN == NaN); //false
JavaScript には isNaN() 関數(shù)があり、この関數(shù)は任意の型のパラメーターを受け入れます。 "數(shù)値ではありません" "。 isNaN() は値を受け取ると、その値を數(shù)値に変換しようとします。數(shù)値ではない一部の値は、文字列「10」やブール値など、數(shù)値に直接変換されます。數(shù)値に変換できない値があると、この関數(shù)は true を返します。例:
alert(isNaN(NaN)); //true alert(isNaN(10)); //false(10是一個數(shù)值) alert(isNaN("10")); //false(可能被轉(zhuǎn)換為數(shù)值10) alert(isNaN("blue")); //true(不能被轉(zhuǎn)換為數(shù)值) alert(isNaN(true)); //false(可能被轉(zhuǎn)換為數(shù)值1)
數(shù)値以外の値を數(shù)値に変換できる関數(shù)は 3 つあります: Number()、parseInt()、parseFloat()。最初の関數(shù)である変換関數(shù) Number() は任意のデータ型に使用できますが、他の 2 つの関數(shù)は特に文字列を數(shù)値に変換するために使用されます。これら 3 つの関數(shù)は、同じ入力に対して異なる結(jié)果を返します。
Number()関數(shù)の変換ルールは以下の通りです
●ブール値の場合はtrue、falseはそれぞれ1、0に置き換えられます
●數(shù)値の場合はそのまま渡されますで返されます
● null値の場合は0を返します
● 未定義の場合はNaNを返します
● 文字列の場合は次の規(guī)則に従います:
○ 文字列に數(shù)字のみが含まれる場合は変換しますつまり、「1」は 1 になり、「123」は 123 になり、「011」は 11 になります (先頭の 0 は無視されます)
○ 文字列に次のような有効な浮動小數(shù)點形式が含まれている場合"1.1"、対応する浮動小數(shù)點數(shù)に変換します (同様に、先頭の 0 も無視されます)
○ 文字列に "0xf" などの有効な 16 進形式が含まれている場合は、同じ 10 進整數(shù)値に変換しますサイズ
○ If 文字列が空の場合は0に変換
○ 文字列に上記形式以外の文字が含まれている場合はNaNに変換
● オブジェクトの場合は、その文字列のvalueOf()メソッドを呼び出すオブジェクトの場合、戻り値を前述のルールに従って変換します。変換の結(jié)果が NaN の場合、オブジェクトの toString() メソッドが呼び出され、返された文字列値が前述の規(guī)則に従って変換されます。
var num1 = Number("Hello World"); //NaN var num2 = Number(""); //0 var num3 = Number("000011"); //11 var num4 = Number(true); //1
Number() 関數(shù)は文字列を変換する場合には複雑で不合理であるため、整數(shù)を処理する場合には parseInt() 関數(shù)がよく使用されます。 parseInt() 関數(shù)が文字列を変換する場合、文字列が數(shù)値パターンに準(zhǔn)拠しているかどうかに大きく依存します。最初の非スペース文字が見つかるまで、文字列內(nèi)の先頭のスペースは無視されます。最初の文字列が數(shù)字または負(fù)符號でない場合、parseInt() は NaN を返します。つまり、parseInt() を使用して空の文字列を変換すると NaN が返されます。最初の文字が數(shù)字の場合、praseInt() は、後続の文字がすべて解析されるか、數(shù)字以外の文字が検出されるまで、2 番目の文字の解析を続けます。たとえば、小數(shù)點は有効な數(shù)字ではないため、「1234blue」は 1234 に変換され、「22.5」は 22 に変換されます。
文字列の最初の文字が數(shù)字の場合、parseInt() はさまざまな整數(shù)形式 (つまり、10 進數(shù)、8 進數(shù)、16 進數(shù)) も認(rèn)識できます。 parseInt() 関數(shù)の変換規(guī)則をよりよく理解するために、ここにいくつかの例を示します
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() 関數(shù)と同様に、parseFloat() も最初の文字 (位置 0) から始めて各文字を解析します。そして、文字列の終わりまで、または無効な浮動小數(shù)點數(shù)値文字が見つかるまで解析されます。つまり、文字列の最初の小數(shù)點は有効ですが、2 番目の小數(shù)點は無効であるため、それ以降の文字列は無視されます。たとえば、「22.34.5」は 22.34 に変換されます。
parseFloat() と parseInt() の 2 番目の違いは、先頭のゼロを常に無視することです。 parseFloat() の値は 10 進數(shù)値を解析するため、2 番目のパラメーターで基數(shù)を指定する必要はありません。 String 型は、0 個以上の 16 ビット Unicode 文字で構(gòu)成される文字シーケンス、つまり文字列を表すために使用されます。文字列は一重引用符 (') または二重引用符 (") で表すことができます。
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 は、出力時に基數(shù)に応じてさまざまな數(shù)値形式に変換できます。
変換する値がnullか未定義かわからない場合は、変換関數(shù)String()を使用することもできます。この関數(shù)は、任意の型の値を文字列に変換できます。 String() 関數(shù)は次の変換規(guī)則に従います:
● 値に toString() メソッドがある場合、そのメソッドを (パラメーターなしで) 呼び出し、対応する結(jié)果を返します
● 値が 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
オブジェクト型
オブジェクトは実際にはデータと関數(shù)の集合です。オブジェクトは、作成するオブジェクトのタイプの名前を続けて new 演算子を?qū)g行することによって作成できます。カスタム オブジェクトを作成するには、オブジェクト型のインスタンスを作成し、それにプロパティやメソッドを追加します。
var o = new Object();
Object のすべてのインスタンスには次のプロパティとメソッドがあります:
● コンストラクター - 現(xiàn)在のオブジェクトの作成に使用される関數(shù)を保持します
● hasOwnProperty(propertyName) - for指定されたプロパティは、(インスタンスのプロトタイプではなく) 現(xiàn)在のオブジェクト インスタンスに存在します。このうち、パラメータとしてのプロパティ名 (propertyName) は文字列形式で指定する必要があります (例: o.hasOwnProperty("name"))
● isPrototypeOf(object) - 受信したオブジェクトが別のオブジェクト Prototype
● propertyIsEnumerable(propertyName) - for-in ステートメントを使用して指定されたプロパティを列挙できるかどうかを確認(rèn)するために使用されます
● toString() - オブジェクトの文字列表現(xiàn)を返します
● valueOf() - A を返しますオブジェクトの文字列、數(shù)値、またはブール表現(xiàn)。通常は toString() メソッドの戻り値と同じです。