0
0
Lập trình
Harry Tran
Harry Tran106580903228332612117

JavaScript Nâng Cao - Kỳ 8: Khám Phá Các Khái Niệm Nâng Cao

Đăng vào 1 tháng trước

• 4 phút đọc

Một Câu Nói Đáng Suy Nghĩ

Trên đời chỉ có thứ nhiều người chửi và thứ không ai thèm dùng.

JavaScript có lẽ là một ví dụ điển hình cho điều này. Mặc dù có nhiều điểm thú vị, nhưng nó cũng mang lại cho lập trình viên không ít đau đầu. Trong bài viết này, mình sẽ cùng các bạn khám phá sâu hơn về một số khái niệm trong JavaScript qua những ví dụ cụ thể, nhằm giúp bạn hiểu rõ hơn về ngôn ngữ lập trình này.

Chương trình này có thể kéo dài một thời gian, và mình không chắc sẽ có bao nhiêu Kỳ. Tuy nhiên, mình sẽ tóm tắt lại toàn bộ kiến thức cần thiết cho những ai chưa đọc các bài trước của mình về JavaScript. Mình cũng sẽ tự do giải thích lại nhiều lý thuyết một cách ngẫu nhiên để các bạn dễ dàng ghi nhớ hơn.

Hãy cùng bắt đầu nhé! 🚀

Nếu có bất kỳ câu hỏi nào, đừng ngần ngại để lại comment phía dưới bài viết, hoặc chỉ cần để lại một lời chào là bạn đã giúp mình có thêm động lực để hoàn thành series này. Cảm ơn các bạn rất nhiều! 🤗

1. Khám Phá Toán Tử typeof

Đoạn mã sau đây hoạt động như thế nào, và kết quả của nó là gì?:

Copy
console.log(typeof typeof 1);
  • A: "number"
  • B: "string"
  • C: "object"
  • D: "undefined"

Giải Thích

Kết quả của câu hỏi này là:

Đáp án: B

1.1. Toán Tử typeof

Mục đích của toán tử typeof là để xác định kiểu dữ liệu của một biến hoặc biểu thức trong JavaScript. Ví dụ:

Copy
console.log(typeof 42);        // "number"
console.log(typeof "hello");   // "string"
console.log(typeof true);      // "boolean"
console.log(typeof undefined); // "undefined"
console.log(typeof null);      // "object"
console.log(typeof {});        // "object"
console.log(typeof []);        // "object"
console.log(typeof function(){}); // "function"

1.2. Phân Tích Câu Hỏi

Cho đoạn mã sau:

Copy
console.log(typeof typeof 1);
  • typeof 1 trả về "number" vì 1 là một số.
  • Tiếp theo, chúng ta đang hỏi kiểu dữ liệu của chuỗi "number", và đó là "string".

Và đó chính là lý do tại sao kết quả cuối cùng là "string".

2. Gán Giá Trị Cho Phần Tử Mảng Vượt Quá Độ Dài

Câu hỏi tiếp theo là gì?:

Copy
const numbers = [1, 2, 3];
numbers[10] = 11;
console.log(numbers);
  • A: [1, 2, 3, 7 x null, 11]
  • B: [1, 2, 3, 11]
  • C: [1, 2, 3, 7 x empty, 11]
  • D: SyntaxError

Giải Thích

Kết quả là:

Đáp án: C

2.1. Mảng Trong JavaScript

Mảng là một cấu trúc dữ liệu linh hoạt, cho phép lưu trữ nhiều loại dữ liệu khác nhau và có thể mở rộng kích thước một cách linh hoạt.

2.2. Gán Giá Trị Vượt Quá

Khi bạn gán giá trị cho một chỉ số trong mảng vượt quá độ dài hiện tại, JavaScript tự động mở rộng mảng để chứa chỉ số mới. Các vị trí không được gán giá trị giữa phần tử cuối cùng hiện tại và phần tử mới sẽ không được khởi tạo.

2.3. Các Slot Trống

Các vị trí chưa được khởi tạo sẽ được gọi là "empty slots" và sẽ không được hiển thị trong khi duyệt mảng.

2.4. Phân Tích Kết Quả

Khi chạy đoạn mã sau:

Copy
const numbers = [1, 2, 3];
numbers[10] = 11;
console.log(numbers);

Kết quả sẽ là một mảng có 3 phần tử ban đầu và 7 vị trí trống, cùng với phần tử mới ở cuối, đại diện là [1, 2, 3, empty × 7, 11].

3. Biến Block-Scoped Trong Catch Block

Đoạn mã sau hoạt động như thế nào?:

Copy
(() => {
  let x, y;
  try {
    throw new Error();
  } catch (x) {
    (x = 1), (y = 2);
    console.log(x);
  }
  console.log(x);
  console.log(y);
})();
  • A: 1, undefined, 2
  • B: undefined, undefined, undefined
  • C: 1, 1, 2
  • D: 1, undefined, undefined

Giải Thích

Kết quả sau khi chạy mã là:

Đáp án: A

3.1. Phạm Vi Biến Trong JavaScript

Biến được khai báo bằng var có phạm vi trong toàn bộ hàm. Ngược lại, letconst có phạm vi hạn chế trong khối mã. Điều này giải thích một số kết quả trong đoạn mã.

4. Kiểu Dữ Liệu Trong JavaScript

Mọi thứ trong JavaScript có thể được phân loại thành:

  • A: primitives hoặc object
  • B: function hoặc object
  • C: chỉ object thôi
  • D: number hoặc object

Kết Luận Về Kiểu Dữ Liệu

Đáp án chính xác là:

Đáp án: A

4.1. Kiểu Nguyên Thủy Và Đối Tượng

JavaScript có 7 loại kiểu dữ liệu nguyên thủy, trong khi mọi thứ không phải nguyên thủy đều thuộc loại đối tượng. Việc nắm vững loại dữ liệu là rất quan trọng trong lập trình JavaScript.

5. Phương Pháp Reduce Trong JavaScript

Và cuối cùng, đoạn mã sau đây cho chúng ta kết quả gì?:

Copy
[[0, 1], [2, 3]].reduce(
  (acc, cur) => {
    return acc.concat(cur);
  },
  [1, 2]
);
  • A: [0, 1, 2, 3, 1, 2]
  • B: [6, 1, 2]
  • C: [1, 2, 0, 1, 2, 3]
  • D: [1, 2, 6]

Giải Thích

Kết quả là:

Đáp án: C

5.1. Hàm Reduce

Phương thức reduce() giúp thu gọn một mảng thành giá trị duy nhất. Cú pháp cơ bản và cách thức hoạt động của nó được miêu tả rõ ràng qua ví dụ trên. Bằng cách sử dụng reduce(), chúng ta có thể biến đổi mảng hai chiều thành mảng một chiều một cách dễ dàng.

Kết Luận

Việc nắm vững các khái niệm nâng cao trong JavaScript sẽ giúp bạn trở thành một lập trình viên hiệu quả hơn. Hi vọng rằng qua từng phần của bài viết, bạn sẽ có cái nhìn sâu sắc hơn về JavaScript và áp dụng vào công việc của mình.
source: viblo

Gợi ý câu hỏi phỏng vấn
Không có dữ liệu

Không có dữ liệu

Bài viết được đề xuất
Bài viết cùng tác giả

Bình luận

Chưa có bình luận nào

Chưa có bình luận nào