1。分類
基本データ型:未定義、ヌル、文字列、ブール、数
複雑なデータ型:オブジェクト
オブジェクトの属性は、順序付けられていない名前と値ペア(名前:値)の形式で定義されます。
2。詳細な説明
1。未定義:未定義のタイプには、1つの値のみがあります。未定義です。変数がVARを使用して宣言されたが初期化されていない場合、この変数の値は未定義です。
未定義の値を含む変数は、定義されていない変数とは異なります。次の例を説明できます。
コードコピーは次のとおりです。
var demo1; //宣言されたが初期化されていない
アラート(demo1); //未定義
alert(demo2); //エラーを報告すると、Demo2は定義されていません
2。NULL :nullタイプには1つの値のみがあります:null。論理的な観点から、ヌル値は空のオブジェクトポインターを表します。
定義された変数が将来オブジェクトを保存するために使用する準備ができている場合、他の値ではなくnullに変数を初期化することが最善です。このようにして、null値を直接検出するだけで、対応する変数がオブジェクトの参照を保存したかどうかを知ることができます。
コードコピーは次のとおりです。
if(car!= null)
{
//車のオブジェクトでいくつかの操作を実行します
}
実際、未定義の値はnull値から派生しているため、ECMA-262は、等式テストが真実であることを指定します。
アラート(未定義== null); //真実
Nullと未定義はそのような関係を持っていますが、それらの用途は完全に異なります。いずれにせよ、変数の値を未定義に明示的に設定する必要はありませんが、同じルールはnullには適用されません。言い換えれば、オブジェクトを保存することを意図している変数がオブジェクトをまだ保存していない限り、変数はnull値を保存するために明示的に許可する必要があります。そうすることは、ヌルの慣習をヌルオブジェクトのポインターとしての慣習を反映するだけでなく、nullと未定義をさらに区別するのにも役立ちます。
3。ブール:ブールタイプには、真とfalseの2つの値があります。これらの2つの値は数値値と同じではないため、trueは必ずしも1に等しくなく、falseは必ずしも0に等しいとは限りません。
ブールタイプのリテラル値は大文字と小文字であり、つまり、真または偽の形態(および他の形式のケースミキシング)はブール値ではありませんが、単なる識別子であることに注意する必要があります。
ブールタイプには2つのリテラル値しかありませんが、JavaScriptのすべてのタイプの値は、これら2つのブール値の値と同等の値を持っています。値を対応するブール値に変換するには、型変換関数Boolean()を呼び出すことができます。
コードコピーは次のとおりです。
var message = 'hello world';
var messageasboolean = boolean(message);
この例では、文字列メッセージは、Messageasbooleの変数に保存されているブール値に変換されます。 boolean()関数は、任意のデータ型の値で呼び出すことができ、ブール値は常に返されます。返された値が真かfalsであるかどうかについては、値とその実際の値を変換するデータ型に依存します。次の表は、さまざまなデータ型とそのオブジェクトの変換ルールを示しています。
これらの変換ルールは、フロー制御ステートメント(ステートメントなど)の対応するブール変換の自動実行を理解するために非常に重要です。
コードコピーは次のとおりです。
var message = 'hello world';
if(message)// if(boolean(message)== true)に相当
{
alert( "値は真です"); //値はtrueです
}
この自動ブール変換のため、フロー制御ステートメントで使用されている変数を正確に知ることが重要です。
4。番号:整数と浮動点
4.1整数:計算を実行すると、すべてのオクタルと16進数が10進数に変換されます
4.2フローティングポイント:フローティングポイント値の最高精度は17ビットであるため、算術を計算する際の精度は整数の精度よりもはるかに少ないです。たとえば、0.1+0.2の結果は0.3ではなく、0.30000000000000000004です。例えば:
コードコピーは次のとおりです。
a = 0.2;
b = 0.1;
if(a+b == 0.3){
アラート( "hello");
}
それ以外{
アラート( "hi");
}
結果が「HI」がポップアップするため、特定の浮動小数点値をテストしないでください。
4.3 NAN:非数値ではなく、この値は、元々値を返したいオペランドが値を返さない場合(これはエラーを投げかけない)を表すために使用されます。
NAN自体には2つの並外れた特性があります。まず、NAN(例:NAN/10)を含む操作は、マルチステップ計算で問題を引き起こす可能性のある機能であるNANを返します。第二に、NANはNAN自体を含むどの値にも等しくありません。例えば:
コードコピーは次のとおりです。
アラート(nan == nan); //間違い
JavaScriptにはISNAN()関数があります。この関数は、あらゆるタイプのパラメーターを受け入れ、この関数はこのパラメーターが「数値値ではない」かどうかを判断するのに役立ちます。値を受け取った後、ISNAN()はこの値を数値に変換しようとします。数値ではないいくつかの値は、文字列「10」やブール値など、数値に直接変換されます。数値に変換できない値は、この関数がtrueを返します。例えば:
コードコピーは次のとおりです。
アラート(イスナン(ナン)); //真実
アラート(ISNAN(10)); // false(10は数値です)
アラート(isnan( "10")); // false(数値値10に変換される場合があります)
アラート(isnan( "blue")); // true(数値に変換することはできません)
アラート(isnan( "bule123")); // ture(数値に変換することはできません)
アラート(isnan(true)); // false(1の値に変換される場合があります)
非数値値を数値に変換できる3つの関数があります:number()、parseint()、およびparsefloat()。最初の関数、つまり変換関数番号()は任意のデータ型に使用できますが、他の2つの関数は文字列を数値に変換するために特別に使用できます。これらの3つの関数は、同じ入力に対して異なる結果を返します。
数字()関数の変換ルールは次のとおりです。
●ブール値の場合、TrueとFalseはそれぞれ1と0に置き換えられます。
●数値の場合、単純なパスとリターンです。
●null値の場合は、0を返します
●未定義の場合は、NANを返します
●文字列の場合は、次のルールに従ってください。
○文字列に数値のみが含まれている場合、小数値に変換する場合、つまり「1」は1になり、123 "になり、「011」が11になります(主要な0は無視されます)
○文字列に「1.1」などの有効なフローティングポイント形式が含まれている場合、対応するフローティングポイント番号に変換されます(また、Leading 0は無視されます)
○文字列に「0xf」などの有効な16進形式が含まれている場合、同じサイズの小数整数値に変換されます
○文字列が空の場合は、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
文字列を変換すると、数値()関数はより複雑で不合理であるため、ParSeint()関数は整数を処理するときにより一般的に使用され、Parsefloat()関数は、浮動小数点数を処理するときによく使用されます。詳細については、http://www.cnblogs.com/yxfield/p/4167954.htmlを参照してください
5。文字列
文字列型は、ゼロ以上の16ビットユニコード文字、つまり文字列で構成される一連の文字を表すために使用されます。文字列は、単一の引用( ')または二重引用符( ")で表すことができます。
コードコピーは次のとおりです。
var str1 = "hello";
var str2 = 'hello';
任意の文字列の長さは、その長さプロパティにアクセスすることで取得できます。
コードコピーは次のとおりです。
アラート(str1.length); //出力5
値を文字列に変換する方法は2つあります。 1つ目は、ほぼすべての値が持っているtoString()メソッドを使用することです。
コードコピーは次のとおりです。
var age = 11;
var ageasString = age.toString(); //文字列 "11"
var fund = true;
var fundAsstring = fund.toString(); //文字列「true」
数値、ブール、オブジェクト、文字列値にはすべて、toString()メソッドがあります。しかし、NULLおよび未定義の値にはこの方法はありません。
ほとんどの場合、toString()メソッドを呼び出すと、パラメーターを渡す必要はありません。ただし、数値のtoString()メソッドを呼び出すと、パラメーターを渡すことができます。出力値のカーディナリティです。
コードコピーは次のとおりです。
var num = 10;
alert(num.tostring()); // "10"
アラート(num.tostring(2)); // "1010"
アラート(num.tostring(8)); // "12"
アラート(num.tostring(10)); // "10"
アラート(num.tostring(16)); //「A」
この例から、Cardinalityを指定することにより、ToString()メソッドが出力値を変更することがわかります。値10は、異なるカーディナリティに応じて出力するときに異なる数値形式に変換できます。
変換される値がnullまたは未定義であるかどうかを知らなくても、任意のタイプの値を文字列に変換できるTransformation function string()を使用することもできます。文字列()関数は、次の変換ルールに従います。
●値にtoString()メソッドがある場合、メソッドは呼び出され(パラメーターなし)、対応する結果が返されます。
●値がnullの場合、「null」を返します
●値が未定義の場合、「未定義」を返します
6。オブジェクト
オブジェクトは、実際にはデータと関数のコレクションです。オブジェクトは、新しいオペレーターを実行して、作成するオブジェクトタイプの名前を実行することで作成できます。タイプオブジェクトのインスタンスを作成し、プロパティと(または)メソッドを追加することにより、カスタムオブジェクトを作成できます。
var o = new object();
オブジェクトタイプのプロパティとメソッドは、より具体的なオブジェクトにも存在します。オブジェクトの各インスタンスには、次のプロパティとメソッドがあります。
●コンストラクター(コンストラクター) - 現在のオブジェクトを作成するために使用される関数を保存します
●HasownProperty(PropertyName) - 指定されたプロパティが現在のオブジェクトインスタンスに存在するかどうかを確認するために使用されます(インスタンスのプロトタイプではありません)。ここで、パラメーターとしてのプロパティ名(propertyName)は文字列形式で指定する必要があります(たとえば:o.hasownProperty( "name"))
●ISPrototypeof(オブジェクト) - 着信オブジェクトが別のオブジェクトのプロトタイプであるかどうかを確認するために使用されます
●PropertisEnumerable(PropertyName) - 特定のプロパティをForin Statementを使用して列挙できるかどうかを確認するために使用されます。
●toString() - オブジェクトの文字列表現を返します
●valueof() - オブジェクトの文字列、数値またはブール表現を返します。通常、toString()メソッドの返品値は同じです。
3。小さいテスト
コードコピーは次のとおりです。
typeof(nan)
typeof(無限)
typeof(null)
typeof(未定義)
多くのインタビューでは、上記の質問をします~~
上記は、これらの6つのJavaScriptデータ型の紹介です。あなたはそれをはっきりと理解しましたか?この記事を読んだ後、改善できることを願っています。