--- title: Primitive slug: Tu-dien-thuat-ngu/Primitive translation_of: Glossary/Primitive ---

Trong {{Glossary("JavaScript")}}, một bản nguyên (giá trị nguyên thủy, giá trị sơ khai, kiểu dữ liệu sơ khai) là dữ liệu mà dữ liệu này không phải {{Glossary("object")}} và không có {{glossary("method","phương thức")}}. Có 7 kiểu dữ liệu bản nguyên: {{Glossary("string")}}, {{Glossary("number")}}, {{Glossary("bigint")}}, {{Glossary("boolean")}}, {{Glossary("null")}}, {{Glossary("undefined")}}, {{Glossary("symbol")}} (mới thêm vào trong {{Glossary("ECMAScript")}} 2015).

Most of the time, a primitive value is represented directly at the lowest level of the language implementation.

Tất cả bản nguyên đều là bất biến, tức là chúng không thể bị thay đổi. Đừng để bối rối giữa một bản nguyên với một biến được gán giá trị bản nguyên. Biến đó có thể được gán lại giá trị mới, nhưng giá trị đang tồn tại không thể bị thay đổi theo cái cách mà object, mảng và hàm có thể bị thay đổi.

Ví dụ

Ví dụ này sẽ giúp bạn hiểu rõ thực tế là các giá trị bản nguyên không thể bị thay đổi.

JavaScript

 // Sử dụng phương thức chuỗi không làm biến đổi chuỗi
 var bar = "baz";
 console.log(bar);               // baz
 bar.toUpperCase();
 console.log(bar);               // baz

 // Sử dụng một phương thức mảng để làm biến đổi mảng
 var foo = [];
 console.log(foo);               // []
 foo.push("plugh");
 console.log(foo);               // ["plugh"]

 // Câu lệnh gán đã cho bản nguyên một giá trị mới (đây là giá trị mới chứ không phải biến đổi giá trị cũ)
 bar = bar.toUpperCase();       // BAZ

Một bản nguyên có thể bị thay thế, nhưng không thể biến đổi nó trực tiếp.

Ví dụ khác [ Từng-bước ]

Ví dụ sau đây sẽ cho bạn thấy cách JavaScript làm việc với các bản nguyên.

JavaScript

// Xác định bản nguyên
let foo = 5;

// Định nghĩa hàm để thay đổi giá trị bản nguyên
function addTwo(num) {
   num += 2;
}
// Một hàm khác cố gắng làm điều tương tự
function addTwo_v2(foo) {
   foo += 2;
}

// Gọi hàm thứ nhất và truyền bản nguyên của chúng ta vào như là một đối số
addTwo(foo);
// Nhận về giá trị bản nguyên hiện tại
console.log(foo);   // 5

// Cố gắng một lần nữa với hàm thứ hai của chúng ta...
addTwo_v2(foo);
console.log(foo);   // 5

Bạn có đang nghĩ rằng đó phải là 7 chứ không phải 5 không? Nếu có, dưới đây là cách đoạn mã hoạt động:

Đó là lý do tại sao các Bản nguyên là bất biến - thay vì làm việc trực tiếp với chúng, chúng ta làm việc với bản sao, không làm ảnh hưởng bản gốc.

Các object bọc bản nguyên trong JavaScript

Ngoại trừ nullundefined, mọi giá trị bản nguyên đều có các object tương đương mà các object này sẽ bao bọc xung quanh các giá trị bản nguyên:

Phương thức valueOf() của màng bọc sẽ trả về giá trị bản nguyên.

Tham khảo thêm

Hiểu biết chung