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ì?:
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ụ:
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:
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ì?:
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:
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?:
(() => {
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, let
và const
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ì?:
[[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