Cấu trúc và kiểu dữ liệu trong Javascript
Giống như các ngôn ngữ lập trình khác JavaScript cũng có cấu trúc và kiểu dữ liệu, số lượng kiểu dữ liệu cũng không khác nhiều lắm.
Kiểu dữ liệu
Có nhiều thống kê về kiểu dữ liệu của JavaScript và theo mình tìm kiếm thì nó không đồng nhất, ở đây mình sẽ liệt kê các kiểu dữ liệu mà mình đã tìm thấy:
- Các kiểu dữ liệu cơ bản:
- Boolean.
true
vàfalse
. VD:var bien = true;
- null. Một từ khóa đạc biệt biểu thị giá trị null. Vì JavaScript là case-sensitive,
null
sẽ không giống vớiNull
,NULL
, hoặc bất kỳ biến thể khác. - undefined. Giá trị khai báo của biến là không xác định (như bài trước ta đã biết)
- Number. Một số nguyên (integer) hoặc số thực dấu chấm động (floating point number)
42
hoặc3.14159
. - BigInt. Một số nguyên với giá trị rất lớn. VD:
9007199254740992n
. - String. Strings là một chuỗi gồm một hoặc nhiều ký tự (chữ cái, số, ký hiệu). Các chuỗi hữu ích ở chỗ chúng đại diện cho dữ liệu văn bản. Ví dụ:
var char = "Ngày sinh của tôi là 01/01/1900";
. - Symbol (mới trong ECMAScript 6). Một kiểu dữ liệu mà các giá trị của nó là duy nhất và bất biến (chúng ta sẽ nói đến nó sau).
- Boolean.
- Đối tượng Object
Chúng ta có thể dùng hàm typeof()
để kiểm tra kiểu dữ liệu của biến.
var myvalue = true;
console.log(typeof(myvalue)); // Boolean
var myNull = null;
console.log(typeof(myNull)); // null
var x;
console.log(typeof(x)); // undefined
var num = 1;
console.log(typeof(num)); // Number
var num_bigint = 9007199254740991n;
console.log(typeof(num_bigint)); // BigInt
var my_string = "Hôm nay, ngày 01/01/1900 là sinh nhật của một ai đó";
console.log(typeof(my_string)); // String
1. Boolean
Kiểu dữ liệu Boolean chỉ có 2 giá trị true
(đúng) và false
(sai). Bản thân nó được sử dụng chủ yếu trong các phép so sánh liên quan đến logic toán học hay thuật toán nào đó. VD:
var khoa_cua = true; //Đã khóa cửa
if (khoa_cua) {
console.log('Phải mở khóa mới vào được nhà!!!');
} else {
console.log('Vào nhà thôi!!!');
}
// Vì 'khoa_cua = true' nên câu lệnh if sẽ chạy điều kiện 'đúng'
// Kết quả console.log: Phải mở khóa mới vào được nhà!!!
2. null
Null có nghĩa là giá trị rỗng hoặc giá trị không tồn tại, nó có thể được sử dụng để gán cho một biến như là một đại diện không có giá trị.
var bien = null;
console.log(bien);
// null
Có một điều lạ là khi sử dụng typeof
để xác định kiểu dữ liệu của giá trị null sẽ trả về kết quả object
.
var bien = null;
console.log(typeof(bien));
// object
3. Undefined
Undefined có nghĩa là không xác định. Trong javascript, khi bạn khai báo một biến nhưng chưa gán giá trị cho nó, giá trị của biến đó sẽ là undefined.
var bien;
console.log(bien);
// undefined
undefined
và null
đều biểu thị giá trị rỗng của biến nhưng chúng khác nhau về kiểu dữ liệu, vì thế khi so sách 2 biến có giá trị undefined
và null
chúng ta phải chú ý.
var bien_undefined;
var bien_null = null;
bien_undefined == bien_null; // true
bien_undefined === bien_null; // false
4. Number và BigInt
Cùng để khai báo dữ liệu dạng số. Tuy nhiên Number
bị giới hạn bởi giá trị an toàn từ -9007199254740991
đến 9007199254740991
(2 mũ 53 – 1). Ta có thể sử dụng Number.MAX_SAFE_INTEGER
và Number.MIN_SAFE_INTEGER
để xác định các giá trị an toàn này.
var x = Number.MAX_SAFE_INTEGER + 1;
var y = x + 1;
console.log(console.log(Number.MAX_SAFE_INTEGER);
// 9007199254740991
console.log(x);
// 9007199254740992
console.log(y);
// 9007199254740992
console.log(x === y);
// true
Như chúng ta thấy khi x
và y
vượt ngoài giá trị an toàn thì việc so sánh giữa các giá trị này cũng dẫn đến sai số.
BigInt
cũng giống như Number
trong một vài trường hợp, xong khác nhau lớn nhất giữa chúng là nó không thể sử dụng được dươi các phương thức của đối tượng Math và không thể sử dụng chung với các biến Number
.
Để sử dụng BigInt
dưới dạng Number
bạn phải chuyển đổi dữ liệu và phải cẩn thận vì giá trị của BigInt
lớn hơn mức an toàn của Number
nên có thể dẫn đến sai số.
const theBiggestInt = 9007199254740991n;
const alsoHuge = BigInt(9007199254740991);
// 9007199254740991n
const hugeHex = BigInt("0x1fffffffffffff");
// 9007199254740991n
const hugeBin = BigInt("0b11111111111111111111111111111111111111111111111111111");
// 9007199254740991n
typeof 1n; // bigint
typeof BigInt('1') === 'bigint' // true
Phần lớn trong các trường hợp thông thường chúng ta ít khi phải sử dụng đến BigInt
, nếu như bạn cần tìm hiểu thêm về toán tử và so sánh các giá trị BigInt có thể xem ở đây.
5. String
string
là kiểu dữ liệu dạng chuỗi các ký tự. Trong các ứng dụng thực tế, để người dùng cuối hiểu được nội dung thì việc giao tiếp giữa ứng dụng và người dùng phải thông qua ngôn ngữ tự nhiên tức là chuỗi và các ký tự.
Chính vì thế dữ liệu dạng string
là vô cùng quan trọng.
Việc khai báo biến sử dụng kiểu dữ liệu này thì giá trị khai báo sẽ được đặt trong dấu nháy đơn ''
hoặc nháy kép ""
.
var string_text = 'string text';
var string_text_2 = "string text";
var string_text_3 = "中文 español deutsch English हिन्दी العربية português বাংলা русский 日本語 ਪੰਜਾਬੀ 한국어 தமிழ் עברית";
Thông thường để ghép các chuỗi hay để in ra chuỗi và biến chúng ta sẽ sử dụng phép toán +
để nỗi chuỗi.
var string = "Đây là giá trị của a: ";
var a = 10;
console.log(string + "Không xác định");
// Đây là giá trị của a: Không xác định
console.log(string + a);
// Đây là giá trị của a: 10
Từ ECMAScript 2015 có thêm một cách khai báo nữa là Template literals (Template strings) cho phép bạn sử dụng các string
dưới dạng các biểu thức nhúng. Việc khai báo giá trị sẽ được đặt trong dấu ``
.
Bạn hoàn toàn có thể gán biến nhanh vào chuỗi bằng cách sử dụng ${ biến }
và có thể sử dụng các toán tử tính toán, so sánh… ở bên trong ${}
.
var a = 5;
var b = 10;
console.log(`Giá trị của biểu thức bằng ${a + b} không bằng ${2 * a + b}.`);
// Giá trị của biểu thức bằng 15 không bằng 20.
Có một điều chú ý rằng khi thực hiện phép toán cộng +
một string
(giá trị này có thể convert sang number) với một number
sẽ trả về dữ liệu là string
trong khi các phép toán khác lại trả về kết quả number
.
var x = '100';
var y = 10;
console.log(x +y);
// 10010
console.log(typeof(x+y));
// string
console.log(x-y);
// 90
console.log(x-y);
// number
6. Object
Object
là kiểu dữ liệu rất quan trọng trong JavaScript, nó thường được sử dụng để lưu trữ dữ liệu dưới dạng các từ khóa và chỉ mục. Chúng ta sẽ tìm hiểu chi tiết về Object
trong bài viết sau.
Bình luận