2.1 JavaScriptの変数
JavaScriptは柔軟でダイナミックなプログラミング言語で、変数の宣言やデータ型の操作に様々な方法をサポートしています。この講義では、変数の宣言方法(var
、let
、const
)とJavaScriptの基本的なプリミティブデータ型を見ていきます。
JavaScriptの変数
JavaScriptは動的型付けの言語です。変数は型を持ちません。どの変数にもいつでも好きな値を代入できます(ただし、細かい点はあります)。
変数を作成するには、次のように書きます:
var name;
変数にはすぐに値を代入することもできます:
var name = value;
でも、実際にはJavaScriptには変数の作成方法が3つもあります。詳しく見てみましょう。
varオペレーター
var
で宣言された変数は、関数スコープまたはグローバルスコープを持ちます。これらは「昇順(hoisting)」により影響を受け、コード実行時にその宣言がスコープの上部に移動されます。
例:
console.log(x); // undefined
var x = 10;
console.log(x); // 10
この例では、変数x
はスコープの最初に持ち上げられています。そのため、最初のconsole.log
でundefined
が出力されます。
つまり、「昇順」は私たちのコードを次のように変換します:
var x;
console.log(x); // undefined
x = 10;
console.log(x); // 10
letオペレーター
開発者たちはvar
オペレーターの動作を変えたかったのですが、すでに書かれた数百万行のコードを壊すことを恐れていました。それで彼らは新しいオペレーターを考案し、少し異なる動作で変数を作成することにしました。
let
で宣言された変数は、ブロックスコープを持ちます。これは、それらが宣言されたコードブロック(通常は{}で囲まれる)内でのみ利用可能なことを意味します。let
は、var
のように昇順されません。
例:
変数y
はif
ブロック内でのみ存在します。
if (true) {
let y = 20;
console.log(y); // 20
}
console.log(y); // ReferenceError: y is not defined
constオペレーター
const
で宣言された変数もブロックスコープを持ち、初期化後に再割り当てすることができません。しかし、const
で宣言されたオブジェクトが不変になるわけではなく、プロパティを変更できます。
つまり、変数自体は変えられませんが、それが指すオブジェクトは変更可能です。最善を尽くそうとしたら、いつものようにそうはならなかった。
例:
この例では、定数x
は再割り当てできませんが、オブジェクトobj
は変更可能です。
const x = 30;
console.log(x); // 30
x = 40; // TypeError: Assignment to constant variable.
const obj = { name: 'Alice' };
obj.name = 'Bob'; // これは許可されます
console.log(obj.name); // Bob
2.2 プリミティブデータ型
JavaScriptは、複雑なオブジェクトではないシンプルな値を表すいくつかのプリミティブデータ型をサポートしています。
型 Number
整数や浮動小数点数を含む、任意の数値を表します。
例:
let num = 42;
let pi = 3.14;
型 String
テキストデータを表します:文字列、文字、絵文字。文字列のように見えるものはすべてここです。
例:
let greeting = "Hello, world!";
let facepalm = "🤦";
let char = 'x';
型 Boolean
論理値true
またはfalse
を表します。
let isTrue = true;
let isFalse = false;
型 Null
意図的な無値を表します。
let empty = null;
もし型が無値を表す1つの値から成り立つなら、それは本当にユニークなタイプではなくユニークな値かもしれません。
型 Undefined
宣言されたが初期化されていない変数の値を表します。
let notAssigned;
console.log(notAssigned); // undefined
2.3 var、let、constの比較
最後に、変数作成の3つの方法をもう一度比較してみましょう:
特徴 | var | let | const |
---|---|---|---|
スコープ | 関数またはグローバル | ブロック | ブロック |
昇順(Hoisting) | はい、でも初期化は昇順しません | いいえ | いいえ |
再割り当て | はい | はい | いいえ |
初期化 | 任意 | 任意 | 必須 |
JavaScriptはいくつかの方法で変数を宣言できます。それぞれがその文脈に応じた独自の特性と適用性を持っています。var
は、昇順とグローバルスコープの特徴から、使用頻度は低くなっています。現代のJavaScriptでは、let
とconst
がブロックスコープと再割り当てのコントロールのための好まれる選択肢です。
プリミティブデータ型は、基本的なデータ構造を操作し、複雑なアプリケーションを構築するために必要な基本機能を提供します。そしてこれは世界で最も人気のある言語です :)
GO TO FULL VERSION