Primitive và Non-Primitive Data Types
Như chúng ta đã biết:
Mutable values là những giá trị có thể được sửa đổi sau khi tạo.
Immutable values là những giá trị không thể sửa đổi sau khi tạo.
Sự khác biệt cơ bản giữa Primitive và Non-Primitive Data Types:
Các giá trị nguyên thủy (Primitive) là bất biến và được lưu trữ theo giá trị thực của nó lúc khởi tạo.
Các giá trị Non-Primitive có thể thay đổi được và lưu trữ bằng tham chiếu (con trỏ).
Ấy ấy, từ từ, thằng admin viết bài ngu rồi, vậy tại sao tôi vẫn thay đổi được giá trị của biến "profile" đây này bạn
let profile= 'tôi có ông anh 96 học bách khoa...'
profile= 'Tôi có ông anh 96 học bách khoa...';
console.log(profile) // Output ->'Tôi có ông anh 96 học bách khoa...'
Biến trong giá trị nguyên thủy được lưu trữ vẫn có thể được gán lại một giá trị mới, nhưng không thể thay đổi giá trị hiện tại như bên dưới. Có thể thay thế giá trị nguyên thủy, nhưng nó không thể được thay đổi trực tiếp.
let profile= 'tôi có ông anh 96 học bách khoa...'
profile[0]= 'T';
console.log(profile) // Output ->'tôi có ông anh 96 học bách khoa...'
JavaScript cung cấp cho chúng ta 7 kiểu dữ liệu nguyên thủy
- String
- Number
- Boolean
- Undefined
- Null
- Symbol
- BigInt
1. String
Là một chuỗi các ký tự, có thể được tạo trực tiếp bằng cách đặt chuỗi các ký tự vào giữa cặp dấu ngoặc đơn ' ' hoặc ngoặc kép " "
var str1 = "Hello, World!";
var str2 = 'satdevelop.com';
2. Number
Chỉ có một loại số. Không có kiểu cụ thể cho số nguyên như Float hay Double hay Integer như bên Java. Số có thể được viết với hoặc không có dấu thập phân. Và đặc biệt ngoài ra kiểu Number còn có 3 giá trị tượng trưng là + Infinity, - Infinity và NaN (Not A Number).
var num1 = 10;
var num2 = 12;
var num3 = 10 / +0;
console.log(num3); // Output: Infinity
var num4 = 12 / -0;
console.log(num4); // Output: -Infinity
3. Boolean
Nó là một kiểu dữ liệu logic và chỉ có thể có 2 giá trị true hoặc false
var isActive = true;
var isDisabled = false;
4. Undefined
Một biến chưa được gán giá trị thì sẽ hold giá trị undefined.
var Luong100Trieu;
console.log(Luong100Trieu); //Output: undefined
5. Null
Một biến được khởi tạo với giá trị null, tương tự undefined, nó không lưu gì cả.
var Luong100Trieu; // undefined value
var Luong200Trieu= null; // null value
console.log(Luong100Trieu == Luong200Trieu); // Output: true
console.log(Luong100Trieu === Luong200Trieu); // Output: false
//Giải thích: Value giống nhau, Datatype khác nhau
6. Symbol
Hàng nóng hổi chỉ có từ ECMAScript6. Nó có 2 tính chất chính là unique and immutable.
let noob1= Symbol("id");
let noob2= Symbol("id");
console.log(noob1 == noob2); //Output: false
console.log(noob1 === noob2); // Output: false
7. BigInt
Lại là một con hàng ung thư chỉ có tại phiên bản ES2020 trở đi
Kiểu BigInt đặc biệt ở chỗ nó có thể biểu diễn các số nguyên với độ chính xác tùy ý. Với BigInt, bạn có thể lưu trữ các số nguyên lớn thậm chí vượt quá giới hạn số nguyên cho kiểu Number.
Tạo nó bằng cách thêm n vào cuối một số hoặc bằng cách gọi constructor.
var TienHocPhi = 1JF8rz8awGTotHg3aYoGa2gy7zAy6Rd1WU
console.log(TienHocPhi );
//Hoặc
var TienHocPhi = BigInt("1JF8rz8awGTotHg3aYoGa2gy7zAy6Rd1WU");
console.log(TienHocPhi );
Non-Primitive Data Type JavaScript
Các kiểu không nguyên thủy của JavaScript là các đối tượng (Objects).
Một đối tượng chứa một tham chiếu / địa chỉ của một cặp (key - value) khóa - giá trị đơn lẻ hoặc nhiều cặp khóa - giá trị.
Bất cứ khi nào chúng ta tham chiếu đến một đối tượng, đồng nghĩa với việc chúng ta muốn truy cập đến một địa chỉ trong bộ nhớ chứa cặp khóa - giá trị.
Nếu chúng ta gán một đối tượng ‘object1’ cho một đối tượng khác ‘object2’, chúng ta thực sự đang gán địa chỉ của ‘object1’ cho ‘object2’, xem ví dụ.
var object1= {Master:0, Noobs:1};
var object2 = object1;
console.log(object2);
//Output: {Master: 0, Noobs: 1}
Vì vậy, khi chúng ta thay đổi giá trị của object2, đồng nghĩa chúng ta thay đổi giá trị của object nằm tại địa chỉ đó, vì vậy giá trị của object1 cũng thay đổi
var object1= {Master:0, Noobs:1};
var object2 = object1;
object2.Master=10;
console.log(object1.Master);
//Output: 10