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