Đối tượng (Objects) trong JavaScript

Javascript căn bản | by Học Javascript

Trong JavaScript, đối tượng (Objects) là một trong những thành phần quan trọng nhất, giúp tổ chức và quản lý dữ liệu một cách hiệu quả. Đối tượng là tập hợp của các thuộc tính (properties)phương thức (methods), trong đó thuộc tính là các giá trị liên quan đến đối tượng, còn phương thức là các hành động mà đối tượng có thể thực hiện.

Objects đóng vai trò quan trọng trong lập trình JavaScript vì chúng giúp nhóm các dữ liệu có liên quan thành một thực thể duy nhất. Điều này giúp việc truy cập, quản lý và thao tác dữ liệu trở nên dễ dàng và trực quan hơn. Đặc biệt, trong lập trình hướng đối tượng (OOP), đối tượng là nền tảng để xây dựng các mô hình dữ liệu phức tạp, giúp viết code gọn gàng, dễ bảo trì và tái sử dụng.

Khái niệm về đối tượng (Objects) trong JavaScript

Định nghĩa Objects

Trong JavaScript, Object (đối tượng) là một kiểu dữ liệu có cấu trúc phức tạp, cho phép lưu trữ nhiều giá trị dưới dạng cặp key-value (khóa - giá trị). Mỗi khóa trong một đối tượng là một chuỗi (string) hoặc Symbol, và giá trị có thể là bất kỳ kiểu dữ liệu nào, bao gồm số, chuỗi, mảng, hàm hoặc thậm chí là một đối tượng khác.

Object là nền tảng của lập trình hướng đối tượng (OOP) trong JavaScript, giúp tổ chức và quản lý dữ liệu theo cách logic và dễ sử dụng hơn.

Cấu trúc của một Object (Key-Value Pairs)

Một đối tượng trong JavaScript được định nghĩa bằng dấu ngoặc nhọn {} và chứa các cặp key-value (khóa - giá trị), được phân tách bằng dấu phẩy.

Cú pháp cơ bản của một Object:

const person = {
    name: "John Doe",  // key: "name", value: "John Doe"
    age: 30,           // key: "age", value: 30
    isMarried: false,  // key: "isMarried", value: false
    greet: function() { // key: "greet", value: một function
        return "Hello!";
    }
};

Trong ví dụ trên:

  • name, age, isMarried, và greet là các key.
  • "John Doe", 30, false, và function() là các value.
  • Các giá trị có thể là chuỗi (string), số (number), boolean, hoặc hàm (function).

So sánh Object với các kiểu dữ liệu khác

Tiêu chí Object Array Primitive Data Types (Number, String, Boolean, etc.)
Cấu trúc dữ liệu Lưu trữ dữ liệu dưới dạng cặp key-value Lưu trữ dữ liệu dưới dạng danh sách có thứ tự Lưu trữ giá trị đơn lẻ
Truy xuất dữ liệu object.key hoặc object["key"] array[index] Truy xuất trực tiếp
Khả năng chứa dữ liệu Chứa nhiều kiểu dữ liệu khác nhau, bao gồm object lồng nhau Thường chứa các phần tử cùng loại, nhưng không bắt buộc Chỉ chứa một giá trị đơn lẻ
Độ linh hoạt Linh hoạt, có thể mở rộng dễ dàng Có trật tự cố định, phù hợp với danh sách dữ liệu Đơn giản, nhanh chóng, dễ thao tác
Tính chất Không có thứ tự cố định giữa các phần tử Có thứ tự cụ thể dựa trên index Dữ liệu đơn giản, không thể mở rộng

Ví dụ về sự khác nhau giữa Object và Array:

const person = { name: "Alice", age: 25 };  // Object: Chứa dữ liệu theo key-value
const numbers = [1, 2, 3, 4, 5];            // Array: Danh sách các giá trị theo thứ tự
  • person.name sẽ trả về "Alice".
  • numbers[0] sẽ trả về 1.

Cách tạo đối tượng trong JavaScript

JavaScript cung cấp nhiều cách khác nhau để tạo đối tượng (Object) tùy vào nhu cầu và tình huống sử dụng. Dưới đây là các phương pháp phổ biến:

Object Literal (Đối tượng dạng chữ - {})

Cú pháp và ví dụ minh họa

Object Literal là cách đơn giản và phổ biến nhất để tạo đối tượng. Chỉ cần sử dụng dấu ngoặc nhọn {} và định nghĩa các cặp key-value bên trong.

Ví dụ:

const person = {
    name: "Alice",
    age: 25,
    isStudent: true,
    greet: function() {
        return `Hello, my name is ${this.name}`;
    }
};

console.log(person.name);  // Alice
console.log(person.greet()); // Hello, my name is Alice

Kết quả :

Lưu ý: Nếu cần tạo nhiều đối tượng có cấu trúc tương tự nhau, Object Literal không tối ưu vì phải lặp lại mã nguồn cho từng đối tượng.

Sử dụng từ khóa new Object()

Một cách khác để tạo đối tượng là sử dụng new Object(), nhưng phương pháp này ít phổ biến hơn so với Object Literal.

Cú pháp và ví dụ

const person = new Object();
person.name = "Bob";
person.age = 30;
person.greet = function() {
    return `Hi, I'm ${this.name}`;
};

console.log(person.name);  // Bob
console.log(person.greet()); // Hi, I'm Bob

Sự khác nhau giữa Object Literal và new Object()

Phương pháp Ưu điểm Nhược điểm
Object Literal ({}) Dễ đọc, dễ viết, ngắn gọn Không linh hoạt khi cần tạo nhiều đối tượng giống nhau
new Object() Có thể mở rộng dễ dàng Dài dòng, ít phổ biến

Sử dụng Constructor Function trong JavaScript

Cách tạo Object bằng hàm tạo (Constructor Function)

Constructor Function là một hàm đặc biệt được sử dụng để tạo nhiều đối tượng có cấu trúc giống nhau. Các thuộc tính và phương thức được định nghĩa bên trong hàm tạo và gán cho this.

Ví dụ minh họa

function Person(name, age) {
    this.name = name;
    this.age = age;
    this.greet = function() {
        return `Hello, my name is ${this.name}`;
    };
}

// Tạo nhiều đối tượng từ Constructor Function
const person1 = new Person("Charlie", 28);
const person2 = new Person("Diana", 24);

console.log(person1.greet()); // Hello, my name is Charlie
console.log(person2.greet()); // Hello, my name is Diana

Kết quả

Ưu điểm của Constructor Function

  • Giúp tạo nhiều đối tượng có cấu trúc giống nhau.
  • Tăng tính tái sử dụng và giúp tổ chức mã nguồn tốt hơn.

Lưu ý: Nếu có nhiều phương thức trong Constructor Function, mỗi đối tượng sẽ có một bản sao riêng biệt của các phương thức đó. Điều này có thể gây tốn bộ nhớ.

Để tối ưu bộ nhớ, chúng ta có thể sử dụng Prototype:

function Person(name, age) {
    this.name = name;
    this.age = age;
}

Person.prototype.greet = function() {
    return `Hello, my name is ${this.name}`;
};

const person3 = new Person("Eve", 22);
console.log(person3.greet()); // Hello, my name is Eve

Sử dụng Class (ES6+) trong JavaScript

ES6 giới thiệu Class, giúp định nghĩa đối tượng một cách trực quan và giống với các ngôn ngữ lập trình hướng đối tượng khác như Java, C#.

Cú pháp khai báo lớp (Class) trong JavaScript

class Person {
    constructor(name, age) {
        this.name = name;
        this.age = age;
    }

    greet() {
        return `Hi, I'm ${this.name}`;
    }
}

// Tạo đối tượng từ Class
const person1 = new Person("Frank", 35);
console.log(person1.greet()); // Hi, I'm Frank

Sử dụng constructor trong Class

  • constructor() là một phương thức đặc biệt trong Class, được gọi tự động khi một đối tượng mới được tạo.
  • Các thuộc tính của đối tượng được gán thông qua this.

Ví dụ minh họa về kế thừa trong Class

ES6 Class hỗ trợ kế thừa (extends), giúp tạo đối tượng con kế thừa thuộc tính và phương thức từ đối tượng cha.

class Animal {
    constructor(name) {
        this.name = name;
    }

    makeSound() {
        return "Some generic sound";
    }
}

class Dog extends Animal {
    constructor(name, breed) {
        super(name); // Gọi constructor của lớp cha (Animal)
        this.breed = breed;
    }

    makeSound() {
        return "Woof! Woof!";
    }
}

const myDog = new Dog("Buddy", "Golden Retriever");
console.log(myDog.name); // Buddy
console.log(myDog.breed); // Golden Retriever
console.log(myDog.makeSound()); // Woof! Woof!

Kết quả :

Ưu điểm của Class trong JavaScript

Dễ đọc, dễ bảo trì.
Hỗ trợ kế thừa (extends).
Tăng tính tổ chức và cấu trúc cho mã nguồn.

Các cách tạo đối tượng trong JavaScript

Phương pháp Cú pháp Ưu điểm Nhược điểm
Object Literal {} Đơn giản, dễ dùng Không phù hợp khi cần tạo nhiều đối tượng giống nhau
new Object() new Object() Có thể mở rộng Ít phổ biến, dài dòng
Constructor Function function Person() {} Dễ tạo nhiều đối tượng Tốn bộ nhớ nếu không dùng prototype
Class (ES6+) class Person {} Dễ đọc, hỗ trợ kế thừa Cần ES6, có thể khó hiểu với người mới

Thuộc tính và phương thức của đối tượng trong JavaScript

Trong JavaScript, đối tượng (Object) bao gồm thuộc tính (properties)phương thức (methods). Đây là hai yếu tố cốt lõi giúp chúng ta làm việc với Object một cách linh hoạt.

Thuộc tính (Properties) của Object

Cách khai báo và truy cập thuộc tính

Thuộc tính trong một đối tượng được định nghĩa dưới dạng cặp key-value. Key đóng vai trò là tên thuộc tính, và value là giá trị của thuộc tính đó.

Có hai cách phổ biến để truy cập thuộc tính của Object:

  • Dùng dấu chấm (.)
  • Dùng dấu ngoặc vuông ([])

Ví dụ minh họa

const person = {
    name: "Alice",
    age: 25,
    job: "Developer"
};

// Truy cập thuộc tính bằng dấu chấm
console.log(person.name); // Alice
console.log(person.age);  // 25

// Truy cập thuộc tính bằng dấu ngoặc vuông
console.log(person["job"]); // Developer

// Khi key chứa khoảng trắng hoặc ký tự đặc biệt, bắt buộc dùng dấu ngoặc vuông
const user = {
    "full name": "John Doe",
    "email-address": "[email protected]"
};

console.log(user["full name"]); // John Doe
console.log(user["email-address"]); // [email protected]

Lưu ý:

  • Sử dụng dấu chấm (.) khi key đơn giản, không chứa khoảng trắng hoặc ký tự đặc biệt.
  • Sử dụng dấu ngoặc vuông ([]) khi key có khoảng trắng hoặc được lưu trong biến.

Cập nhật và xóa thuộc tính trong Object

const person = {
    name: "Alice",
    age: 25
};

// Cập nhật giá trị thuộc tính
person.age = 30;
console.log(person.age); // 30

// Thêm thuộc tính mới
person.job = "Engineer";
console.log(person.job); // Engineer

Xóa thuộc tính
Dùng từ khóa delete để xóa một thuộc tính khỏi đối tượng.

const person = {
    name: "Bob",
    age: 27,
    job: "Designer"
};

// Xóa thuộc tính
delete person.job;

console.log(person.job); // undefined

Kiểm tra sự tồn tại của thuộc tính
Có thể kiểm tra một thuộc tính có tồn tại trong Object hay không bằng:
Toán tử in
hasOwnProperty()

const car = {
    brand: "Toyota",
    model: "Camry"
};

console.log("brand" in car); // true
console.log(car.hasOwnProperty("model")); // true
console.log(car.hasOwnProperty("year")); // false

Phương thức (Methods) của Object trong JavaScript

Phương thức trong Object là các hàm (functions) được khai báo bên trong đối tượng.

Định nghĩa phương thức trong Object

Chúng ta có thể khai báo phương thức theo hai cách:

  • Cách thông thường: Gán một function vào thuộc tính.
  • Cách viết ngắn gọn (ES6+): Dùng cú pháp methodName() {...}.

Ví dụ minh họa

const person = {
    name: "Charlie",
    age: 28,
    
    // Cách thông thường
    greet: function() {
        return `Hello, my name is ${this.name}`;
    },
    
    // Cách viết ngắn gọn (ES6+)
    introduce() {
        return `I am ${this.name}, and I am ${this.age} years old.`;
    }
};

console.log(person.greet()); // Hello, my name is Charlie
console.log(person.introduce()); // I am Charlie, and I am 28 years old.

Kết quả :

Lưu ý:

  • Cách viết ngắn gọn (introduce() {}) được khuyến khích sử dụng hơn trong ES6.
  • Trong phương thức, có thể dùng this để tham chiếu đến chính đối tượng đó.

Gọi phương thức từ đối tượng

Chỉ cần gọi phương thức giống như cách gọi một function bình thường.

const car = {
    brand: "Honda",
    model: "Civic",
    
    start: function() {
        return "The car has started!";
    }
};

console.log(car.start()); // The car has started!

this trong Object trong JavaScript

Định nghĩa this

this là một từ khóa đặc biệt trong JavaScript, đại diện cho đối tượng hiện tại mà phương thức đang được gọi.

Ví dụ về this trong Object

const user = {
    name: "Eve",
    age: 22,
    
    sayHello: function() {
        return `Hi, my name is ${this.name}`;
    }
};

console.log(user.sayHello()); // Hi, my name is Eve

Lưu ý về this trong Arrow Function

Arrow function không có this riêng, nó lấy this từ phạm vi chứa nó (lexical this).

Ví dụ:

const user = {
    name: "Alice",
    
    sayHello: function() {
        return `Hello, I'm ${this.name}`;
    },

    sayHi: () => {
        return `Hi, I'm ${this.name}`;
    }
};

console.log(user.sayHello()); // Hello, I'm Alice
console.log(user.sayHi()); // Hi, I'm undefined

Giải thích:

  • sayHello()function thông thường, nên this tham chiếu đến user.
  • sayHi()arrow function, nó lấy this từ phạm vi chứa nó (ở đây là phạm vi window trong trình duyệt, không có thuộc tính name), nên trả về undefined.

Cách khắc phục: Không nên sử dụng arrow function làm phương thức trong Object.

Tóm tắt về thuộc tính và phương thức trong Object

Khía cạnh Mô tả
Thuộc tính (Properties) Cặp key-value lưu trữ dữ liệu bên trong Object.
Cách truy cập Dùng dấu chấm (.) hoặc dấu ngoặc vuông ([]).
Cập nhật thuộc tính Gán giá trị mới hoặc thêm thuộc tính mới.
Xóa thuộc tính Dùng từ khóa delete.
Phương thức (Methods) Hàm bên trong Object giúp thực hiện các thao tác.
Cách gọi phương thức object.methodName().
this trong Object Đại diện cho đối tượng hiện tại. Arrow function không có this riêng.

Duyệt đối tượng và các phương thức hữu ích trong JavaScript

Trong JavaScript, làm việc với Object không chỉ dừng lại ở việc tạo và thao tác dữ liệu mà còn bao gồm việc duyệt qua các thuộc tínhsử dụng các phương thức hữu ích để quản lý Object một cách hiệu quả.

Dưới đây là những cách phổ biến để duyệt Object và các phương thức quan trọng mà bạn cần biết.

Duyệt qua Object

Khi làm việc với Object, đôi khi chúng ta cần lặp qua tất cả các thuộc tính và giá trị của nó. Có nhiều cách để thực hiện điều này:

Dùng for...in để lặp qua các thuộc tính của Object

Vòng lặp for...in giúp chúng ta duyệt từng key (thuộc tính) trong một Object.

const person = {
    name: "Alice",
    age: 25,
    job: "Developer"
};

for (let key in person) {
    console.log(`${key}: ${person[key]}`);
}

Kết quả:

name: Alice  
age: 25  
job: Developer  

Lưu ý:

  • Vòng lặp for...in chỉ duyệt qua các thuộc tính liệt kê được (enumerable).
  • Không nên sử dụng for...in với mảng, vì nó sẽ lặp qua cả các key không mong muốn.

Sử dụng Object.keys() để lấy danh sách key

Phương thức Object.keys(object) trả về một mảng chứa tất cả các key của Object.

const user = {
    id: 101,
    username: "john_doe",
    email: "[email protected]"
};

console.log(Object.keys(user));

Kết quả:

["id", "username", "email"]

Ứng dụng:

  • Đếm số thuộc tính trong Object:
console.log(Object.keys(user).length); // 3

Lặp qua Object một cách hiện đại:

Object.keys(user).forEach(key => {
    console.log(`${key}: ${user[key]}`);
});

Sử dụng Object.values() để lấy danh sách giá trị

Phương thức Object.values(object) trả về một mảng chứa tất cả các giá trị của Object.

console.log(Object.values(user));

Kết quả:

[101, "john_doe", "[email protected]"]

Ứng dụng:

  • Dùng Object.values() để tính tổng giá trị số trong Object
const scores = { math: 85, english: 90, science: 78 };
const total = Object.values(scores).reduce((sum, score) => sum + score, 0);
console.log(total); // 253

Sử dụng Object.entries() để lấy danh sách key-value dưới dạng mảng

Phương thức Object.entries(object) trả về một mảng các cặp [key, value], giúp chúng ta duyệt Object dễ dàng hơn.

console.log(Object.entries(user));

Kết quả:

[
    ["id", 101],
    ["username", "john_doe"],
    ["email", "[email protected]"]
]

Ứng dụng:

  • Duyệt qua Object bằng forEach():
Object.entries(user).forEach(([key, value]) => {
    console.log(`${key}: ${value}`);
});

Lợi ích của Object.entries()

  • Hữu ích khi làm việc với Object theo cách tương tự như mảng.
  • Dễ dàng sử dụng cùng với map(), filter(), hoặc reduce().

Các phương thức hữu ích của Object trong JavaScript

Object.assign() – Sao chép Object

Phương thức Object.assign(target, source) được dùng để sao chép một Object sang Object khác.

const user1 = { name: "Alice", age: 25 };
const user2 = Object.assign({}, user1);

console.log(user2); // { name: "Alice", age: 25 }

Ứng dụng:

  • Gộp nhiều Object lại với nhau
const person = { name: "Bob" };
const details = { age: 30, job: "Engineer" };

const merged = Object.assign({}, person, details);
console.log(merged); // { name: "Bob", age: 30, job: "Engineer" }
  • Sao chép Object để tránh thay đổi bản gốc (shallow copy).

Lưu ý: Object.assign() chỉ tạo shallow copy (sao chép nông), nghĩa là nếu Object chứa một Object con, Object con vẫn được tham chiếu.

Object.freeze() – Đóng băng Object (Không thể chỉnh sửa)

Phương thức Object.freeze(object) ngăn không cho thêm, sửa đổi hoặc xóa bất kỳ thuộc tính nào của Object.

const config = {
    apiKey: "123456",
    maxUsers: 100
};

Object.freeze(config);

config.maxUsers = 200;  // Không thể thay đổi
config.newProp = true;  // Không thể thêm mới

console.log(config.maxUsers); // 100
console.log(config.newProp);  // undefined

Ứng dụng:
Dùng để bảo vệ cấu hình, dữ liệu quan trọng không bị thay đổi.

Object.seal() – Giới hạn chỉnh sửa Object

Phương thức Object.seal(object) không cho phép thêm hoặc xóa thuộc tính, nhưng vẫn có thể thay đổi giá trị của các thuộc tính hiện có.

const user = {
    name: "David",
    age: 29
};

Object.seal(user);

user.age = 30;  //  Có thể cập nhật
user.gender = "Male";  //  Không thể thêm mới
delete user.name;  //  Không thể xóa

console.log(user); // { name: "David", age: 30 }

Ứng dụng:
Dùng khi muốn bảo vệ Object khỏi thay đổi cấu trúc, nhưng vẫn cho phép cập nhật dữ liệu bên trong.

Phương Thức Chức Năng
for...in Duyệt qua tất cả thuộc tính của Object.
Object.keys() Lấy danh sách key của Object dưới dạng mảng.
Object.values() Lấy danh sách value của Object dưới dạng mảng.
Object.entries() Trả về mảng chứa cặp [key, value].
Object.assign() Sao chép hoặc gộp Object.
Object.freeze() Ngăn chặn mọi thay đổi trên Object.
Object.seal() Không thể thêm/xóa thuộc tính, nhưng có thể cập nhật giá trị hiện tại.

JSON (JavaScript Object Notation) và Object trong JavaScript

Sự khác nhau giữa Object và JSON

ObjectJSON (JavaScript Object Notation) đều được sử dụng để lưu trữ và trao đổi dữ liệu trong JavaScript, nhưng có một số điểm khác biệt quan trọng giữa chúng.

Đặc điểm Object JSON
Định nghĩa Cấu trúc dữ liệu gồm cặp key: value. Định dạng dữ liệu dạng chuỗi (string).
Cú pháp Có thể chứa phương thức (hàm). Chỉ chứa dữ liệu, không có phương thức.
Dấu nháy Không bắt buộc dùng dấu nháy cho key. Key phải được đặt trong dấu nháy kép ".
Dữ liệu hỗ trợ Hỗ trợ mọi kiểu dữ liệu (string, number, boolean, function, undefined, object, array). Chỉ hỗ trợ string, number, boolean, null, array, object.
Ứng dụng Dùng trong JavaScript để thao tác dữ liệu. Dùng để truyền dữ liệu giữa server-client, API, lưu trữ dữ liệu.

Ví dụ về Object:

const person = {
    name: "Alice",
    age: 25,
    isStudent: false,
    greet: function () {
        return "Hello!";
    }
};

Ví dụ về JSON (dữ liệu dạng chuỗi):

{
    "name": "Alice",
    "age": 25,
    "isStudent": false
}

Chuyển đổi giữa Object và JSON

Chuyển Object thành JSON (JSON.stringify())

Phương thức JSON.stringify(object) được dùng để chuyển một Object thành chuỗi JSON, giúp dễ dàng truyền tải hoặc lưu trữ dữ liệu.

const person = {
    name: "Alice",
    age: 25,
    isStudent: false
};

const jsonString = JSON.stringify(person);
console.log(jsonString);

Kết quả:

{"name":"Alice","age":25,"isStudent":false}

Ứng dụng:
Dùng để gửi dữ liệu qua API hoặc lưu trữ vào Local Storage.

Chuyển JSON thành Object (JSON.parse())

Phương thức JSON.parse(jsonString) giúp chuyển đổi chuỗi JSON thành Object để sử dụng trong JavaScript.

const jsonString = '{"name":"Alice","age":25,"isStudent":false}';

const personObject = JSON.parse(jsonString);
console.log(personObject);

Kết quả:

{ name: 'Alice', age: 25, isStudent: false }

Ứng dụng:
Dùng để nhận dữ liệu từ API và chuyển đổi sang Object để xử lý.

Ứng dụng JSON trong truyền dữ liệu trong JavaScript

JSON là định dạng dữ liệu phổ biến được sử dụng trong API, Web, và Cơ sở dữ liệu.

Gửi dữ liệu JSON qua API (Fetch API)

Ví dụ gửi dữ liệu JSON đến server:

const data = {
    username: "john_doe",
    email: "[email protected]"
};

fetch("https://api.example.com/users", {
    method: "POST",
    headers: {
        "Content-Type": "application/json"
    },
    body: JSON.stringify(data)
})
.then(response => response.json())
.then(result => console.log(result))
.catch(error => console.error("Lỗi:", error));

Lưu trữ JSON trong Local Storage

Lưu dữ liệu vào Local Storage

const user = { name: "Alice", age: 25 };
localStorage.setItem("user", JSON.stringify(user));

Lấy dữ liệu từ Local Storage

const storedUser = JSON.parse(localStorage.getItem("user"));
console.log(storedUser);

Kết bài

Đối tượng (Object) là một trong những khái niệm cốt lõi trong JavaScript, đóng vai trò quan trọng trong việc quản lý và thao tác dữ liệu. Từ cách tạo đối tượng, truy cập thuộc tính, sử dụng phương thức, đến các kỹ thuật nâng cao như JSON, deep copy, và xử lý this, tất cả đều góp phần làm cho JavaScript trở nên linh hoạt và mạnh mẽ hơn.

Việc hiểu và sử dụng thành thạo Objects giúp lập trình viên viết code hiệu quả hơn, dễ bảo trì hơn và tối ưu hóa hiệu suất của ứng dụng. Ngoài ra, tránh các lỗi phổ biến khi làm việc với Objects sẽ giúp bạn tránh được nhiều lỗi khó debug trong quá trình phát triển.

Hy vọng với những kiến thức đã trình bày, bạn có thể vận dụng Objects vào thực tế, từ xử lý dữ liệu trong ứng dụng web, làm việc với API đến tối ưu hóa hiệu suất chương trình. Hãy tiếp tục thực hành và khám phá thêm để làm chủ JavaScript một cách chuyên sâu hơn!

Bài viết liên quan

  • 2