--- title: Primitive (プリミティブ) slug: Glossary/Primitive tags: - CodingScripting - Glossary - JavaScript - 用語集 translation_of: Glossary/Primitive ---

{{Glossary("JavaScript")}} において、プリミティブ (primitive、プリミティブ値、プリミティブデータ型) は{{Glossary("object","オブジェクト")}}でなく、{{glossary("method","メソッド")}}を持たないデータのことです。 6 種類のプリミティブデータ型があります。{{Glossary("string","文字列")}}、{{Glossary("number","数値")}}、{{Glossary("bigint","BigInt")}}、{{Glossary("boolean","真偽値")}}、{{Glossary("undefined")}}、そして{{Glossary("symbol","シンボル")}} ({{Glossary("ECMAScript")}} 2016 で追加) です。また、プリミティブに見える {{Glossary("null")}} もありますが、実際にはすべての {{jsxref("Object")}} の特殊なケースです。そして、構造化された型はすべてプロトタイプチェーンによって null から派生しています。

多くの場合、プリミティブ値は、その言語実装の最下層にて直接的に表現されます。

すべてのプリミティブ値は、イミュータブル (immutable) 、つまり変更できません。変数には新しい値を再割り当てすることができますが、既存の値については、オブジェクト、配列、関数が変更できるのに対して、プリミティブ値は変更することができません。

この例は、プリミティブ値が変更不可である事実を理解するために役立つでしょう。

JavaScript

// 文字列のメソッドを使用しても文字列は変更されない
var bar = "baz";
console.log(bar);               // baz
bar.toUpperCase();
console.log(bar);               // baz

// 配列のメソッドを使用すると配列が変更される
var foo = [];
console.log(foo);               // []
foo.push("plugh");
console.log(foo);               // ["plugh"]

// プリミティブ値を代入することで新しい (変更されたわけではない) 値になる
bar = bar.toUpperCase();       // BAZ

プリミティブ値は置き換えることができますが、直接変更することはできません。

他の例 [ 手順を追って ]

以下の例は JavaScript がプリミティブ値をどのように扱うかを概観するのに役立つでしょう。

JavaScript

// プリミティブ値
let foo = 5;

// プリミティブ値を変更する関数を定義
function addTwo(num) {
   num += 2;
}
// 同じことをしようとする第二の関数
function addTwo_v2(foo) {
   foo += 2;
}

// 最初の関数を、プリミティブ値を引数として呼び出す
addTwo(foo);
// 現在のプリミティブ値を取得
console.log(foo);   // 5

// 第二の関数を呼び出してみる...
addTwo_v2(foo);
console.log(foo);   // 5

5 ではなく 7 になると思いませんでしたか?そう思った場合は、このコードがどのように実行されるかを見てください。

これが、プリミティブ値が変更不可である理由です - 直接作業するのではなく、元の値に影響せずにコピーで作業しています。

JavaScript のプリミティブラッパーオブジェクト

nullundefined を除くすべてのプリミティブ値には、そのプリミティブ値を内包する等価のラッパーオブジェクトがあります。

ラッパーの {{jsxref("Global_Objects/Object/valueOf","valueOf()")}} メソッドは、そのプリミティブ値を返します。

詳細情報

基礎知識