Cấu trúc và kiểu dữ liệu trong Javascript

bởi Cò in House - 4 năm trước

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:
    1. Booleantrue và false. VD:  var bien = true;
    2. null. Một từ khóa đạc biệt biểu thị giá trị null. Vì JavaScript là case-sensitivenull sẽ không giống với NullNULL, hoặc bất kỳ biến thể khác.
    3. undefined. Giá trị khai báo của biến là không xác định (như bài trước ta đã biết)
    4. Number. Một số nguyên (integer) hoặc số thực dấu chấm động (floating point number) 42 hoặc 3.14159.
    5. BigInt. Một số nguyên với giá trị rất lớn. VD: 9007199254740992n.
    6. 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";.
    7. 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).
  • Đố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

undefinednull đề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ị undefinednull 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_INTEGERNumber.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 xy 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ài trước

Bài tiếp

Bình luận

avatar