データ型と変数
データ型
コンピュータはその名前が示すように、数学的な計算を行うことができる機械であるため、コンピュータプログラムは当然さまざまな数値を扱うことができます。ただし、コンピュータは数値だけでなく、テキスト、グラフィックス、オーディオ、ビデオ、Web ページなどのさまざまなデータを処理できます。データが異なれば、異なるデータ型の定義が必要になります。 JavaScript では次のデータ型が定義されています:
Number
JavaScript では整数と浮動小数点数が区別されず、次のデータ型が有効です:
123; // Integer 1230.456; / 浮動小数点数 0.4561.2345e3; // 科学的表記法は 1.2345x1000 を表します。これは 1234.5-99 に相当します。 // 結果が計算できない場合、NaN は無限大を表します。 / Infinity は無限大を表し、JavaScript の Number で表現できる最大値を超える場合は Infinity と表現します
コンピューターでは 2 進数を使用するため、整数を表すには 16 進数を使用した方が便利な場合があります。 0x および 0 ~ 9、a ~ f は、たとえば、0xff00、0xa5b4c3d2 などを意味し、10 進数で表現された値とまったく同じです。
Number は四則演算を直接実行できます。ルールは数学と一致しています:
1 + 2; // 3(1 + 2) * 5 / 2; // 7.52 / 0; // Infinity0 / 0; // NaN10 % 3; // 110.5 % 3; // 1.5
% は剰余演算であることに注意してください。
文字列
文字列は、「abc」、「xyz」など、一重引用符 ' または二重引用符 " で囲まれたテキストです。 '' または "" 自体は単なる表現方法であることに注意してください。は文字列の一部ではありません。したがって、文字列 'abc' には a、b、c の 3 つの文字しかありません。
ブール値の式は、ブール代数の式とまったく同じです。 value には true と false のみが含まれます。true と false を直接使用してブール値を表すことも、ブール演算を通じて計算することもできます。 // これは true 値です。 false; // これは false 値です 2 > 1; // これは true 値です 2 >= 3; すべてが true の場合のみ、これは AND 演算です。 && 演算の結果は true です:
true && true; // この && ステートメントは truetrue && false; // この && ステートメントは falsefalse と評価されます && true && false; // この && ステートメントは false と評価されます||演算は、そのうちの 1 つが true であり、演算結果が true である限り、OR 演算です。
! 演算は true を false に、false を true に変える単項演算子です。 // 結果は true! ) ; // 結果は true です
ブール値は、次のような条件判断でよく使用されます:
var age = 15;if (age >= 18) { alert('adult'); } else { alert('teenager'); }比較演算子
数値を比較する場合、比較演算子を通じてブール値を取得できます:
2 > 5; // false5 >= 2; // true7 == 7; // true実際、JavaScript ではあらゆるデータ型の比較が可能です:
false == 0; // truefalse === 0; // false等価演算子 == に特に注意してください。 JavaScript が設計されたとき、2 つの比較演算子がありました。 1 つ目は == 比較で、多くの場合、非常に奇妙な結果が得られます。 2 つ目は == です。 = 比較の場合、データ型の自動変換は行われません。データ型が一致しない場合は false が返されます。 JavaScript の設計上の欠陥のため、== 比較を使用せず、常に === 比較に固執してください。 もう 1 つの例外は、特別な Number NaN がそれ自体を含む他のすべての値と等しくないことです: NaN === NaN; // false
NaN を決定する唯一の方法は isNaN() 関数を使用することです:
isNaN(NaN); // true
最後に、浮動小数点数の等価比較に注意してください:
1 / 3 === (1 - 2 / 3) // false
; JavaScript の設計上の欠陥。コンピューターは無限に繰り返される小数を正確に表現できないため、浮動小数点数では演算中にエラーが発生します。 2 つの浮動小数点数が等しいかどうかを比較するには、その差の絶対値を計算して、それが特定のしきい値より小さいかどうかを確認するだけです:
Math.abs(1 / 3 - (1 - 2 / 3)) < ; 0.0000001; // true
JavaScript の設計者は、空の値を表すために null を使用し、未定義の値を表すために unknown を使用することを望んでいます。これが役に立たないことは事実が証明しており、この 2 つの違いはほとんど重要ではありません。ほとんどの場合、null を使用する必要があります。 unknown は、関数パラメータが渡されるかどうかを決定する場合にのみ役立ちます。
配列
配列とは、項目を順番に並べた集合であり、集合の各値を要素と呼びます。 JavaScript 配列には任意のデータ型を含めることができます。例:
[1, 2, 3.14, 'Hello', null, true];
上記の配列には 6 つの要素が含まれています。配列は [] で表され、要素は , で区切られます。
配列を作成する別の方法は、Array() 関数を使用することです:
new Array(1, 2, 3) // 配列 [1, 2, 3] を作成しました
ただし、コードの都合上、読みやすくするためにそのため、[] を直接使用することを強くお勧めします。 配列の要素にはインデックスによってアクセスできます。インデックスの開始値は 0 であることに注意してください:var arr = [1, 2, 3.14, 'Hello', null, true]; arr[0]; // 返回索引为0的元素,即1arr[5]; // 返回索引为5的元素,即truearr[6]; // 索引超出了范围,返回undefined
Objects
JavaScript オブジェクトは、キーと値の順序付けされていないコレクションです。例:
var person = { name: 'Bob', age: 20, tags: ['js', 'web', 'mobile'], city: 'Beijing', hasCar: true, zipcode: null};
JavaScript オブジェクトのキーはすべて文字列型であり、値は任意のデータ型にすることができます。上記の person オブジェクトは合計 6 つのキーと値のペアを定義しており、それぞれがオブジェクトの属性とも呼ばれます。たとえば、person の name 属性は「Bob」、zipcode 属性は null です。
オブジェクトのプロパティを取得するには、オブジェクト変数を使用します。 プロパティ名: // 'Bob'person.zipcode; // null
JavaScriptでは変数は変数名で表され、英語の大文字と小文字、数字、$、_の組み合わせであり、数字で始めることはできません。変数名に、if、while などの JavaScript キーワードを使用することはできません。変数を宣言するには、var ステートメントを使用します。例:
var a; // 変数 a が宣言され、a の値は未定義です var $b = 1; // 変数 $b が宣言され、値がは $b に割り当てられます。 $ b の値は 1var s_007 = '007'; // s_007 は文字列です var = true; // 答えはブール値です truevar t = null; t is null変数名には中国語も使えますが、困らないようにしてください。
JavaScript では、変数に値を割り当てるには等号 = を使用します。変数には任意のデータ型を割り当てることができます。同じ変数を繰り返し割り当てることも、異なる型の変数にすることもできます。ただし、var を使用して宣言できるのは 1 回のみであることに注意してください。このように、変数自体の型が固定されていない言語を動的言語といい、これに対応する言語を静的言語といいます。静的言語では、変数を定義するときに変数の型を指定する必要があります。値を割り当てるときに型が一致しない場合は、エラーが報告されます。たとえば、Java は静的言語であり、代入ステートメントは次のとおりです:
このため、静的言語と比較して動的言語はより柔軟です。
代入ステートメントの等号を数学の等号と同一視しないでください。たとえば、次のコード:
var a = 123; // a的值是整数123a = 'ABC'; // a变为字符串
x = x + 2 を数学的に理解しても、それはいずれにせよ真ではありません。プログラムでは、代入ステートメントはまず右辺の式 x + 2 を計算し、結果 12 を取得します。そしてそれを変数 x に代入します。前回の x の値は 10 だったので、再代入後の x の値は 12 になります。
strict モード
JavaScript 設計の開始時に、初心者が学習しやすいように、変数を宣言するために var を使用することは必須ではありません。この設計エラーは重大な結果をもたらします。変数が var 宣言なしで使用されると、その変数は自動的にグローバル変数として宣言されます:var x = 10; x = x + 2;同じページ上の異なる JavaScript ファイルで、var が使用されていない場合、両方の場合に次のようになります。変数 i がたまたま使用されていると、変数 i は相互に影響を及ぼし、デバッグが困難な誤った結果が生成されます。
var を使用して宣言された変数は、グローバル変数ではありません。そのスコープは、変数が宣言された関数本体に限定されます (関数の概念については後で説明します)。さまざまな機能体。
JavaScript のこの重大な設計上の欠陥を修正するために、ECMA はその後の仕様で厳密モードを導入しました。変数を宣言するために var を使用せずに変数を使用すると、厳密モードで実行される JavaScript コードは強制的に変数を宣言します。操作ミス。
厳密モードを有効にする方法は、JavaScript コードの最初の行に次のように記述することです:
'use strict';
これは文字列です。厳密モードをサポートしていないブラウザでは、文字列ステートメントとして実行されます。厳密モードをサポートするブラウザでは、厳密モードで JavaScript を実行できるようになります。
ブラウザが厳密モードをサポートできるかどうかをテストするには:
'use strict';
// ブラウザが厳密モードをサポートしている場合、
// 次のコードは ReferenceError エラーを報告します:
i = 10; // i现在是全局变量
abc = 'Hello, world'; alert(abc);