Bộ 7 - Trắc nghiệm JavaScript (JS Quiz) online có đáp án
Thời gian còn lại: --:--
Kết quả của bạn:
Bạn đã đúng:
Bạn đã sai:
Tổng số câu:
Câu 1:Trong JavaScript, kết quả của biểu thức 'typeof null' là gì?
💡 Lời giải chi tiết:
Theo đặc tả kỹ thuật của JavaScript từ các phiên bản đầu tiên, giá trị null được hệ thống phân loại nhầm là một đối tượng và đặc điểm này được giữ lại để đảm bảo tính tương thích ngược. Kết luận Lý giải 'object'
Câu 2:Sự khác biệt chính về phạm vi (scope) giữa biến khai báo bằng 'var' và 'let' là gì?
💡 Lời giải chi tiết:
Biến khai báo bằng 'var' bị giới hạn trong hàm gần nhất chứa nó, trong khi 'let' tuân thủ phạm vi khối lệnh được bao quanh bởi cặp ngoặc nhọn. Kết luận Lý giải 'var' có phạm vi hàm (function scope), còn 'let' có phạm vi khối (block scope)'
Câu 3:Giá trị của từ khóa 'this' trong một hàm mũi tên (arrow function) được xác định như thế nào?
💡 Lời giải chi tiết:
Hàm mũi tên không có ngữ cảnh 'this' riêng mà nó sẽ lấy giá trị 'this' từ phạm vi bên ngoài nơi nó được định nghĩa. Kết luận Lý giải 'Được kế thừa từ phạm vi bao quanh nó (lexical scope)'
Câu 4:Phương thức nào của mảng (Array) trả về một mảng mới với các phần tử đã được biến đổi mà không thay đổi mảng gốc?
💡 Lời giải chi tiết:
Phương thức map() duyệt qua từng phần tử của mảng và tạo ra một mảng mới dựa trên giá trị trả về của hàm gọi lại được cung cấp. Kết luận Lý giải 'map()'
Câu 5:Khái niệm 'Closure' trong JavaScript được hiểu tốt nhất là gì?
💡 Lời giải chi tiết:
Closure cho phép một hàm con truy cập vào các biến thuộc phạm vi của hàm cha chứa nó dù hàm cha đã kết thúc quá trình thực thi. Kết luận Lý giải 'Một hàm có khả năng ghi nhớ và truy cập vào phạm vi biến bên ngoài ngay cả khi phạm vi đó đã thực thi xong'
Câu 6:Sự khác biệt giữa toán tử '==' và '===' là gì?
💡 Lời giải chi tiết:
Toán tử '===' (so sánh nghiêm ngặt) yêu cầu cả giá trị và kiểu dữ liệu phải khớp nhau, trong khi '==' sẽ cố gắng chuyển đổi các toán hạng về cùng một kiểu trước khi so sánh. Kết luận Lý giải '===' so sánh cả giá trị và kiểu dữ liệu, còn '==' thực hiện ép kiểu trước khi so sánh giá trị'
Câu 7:Trong cơ chế 'Event Bubbling', sự kiện lan truyền theo hướng nào?
💡 Lời giải chi tiết:
Sự kiện nổi bọt (Bubbling) bắt đầu kích hoạt tại phần tử sâu nhất (mục tiêu) rồi lần lượt truyền lên các tổ tiên của nó trong cây DOM. Kết luận Lý giải 'Từ phần tử mục tiêu lan lên các phần tử cha bao quanh nó'
Câu 8:Kết quả của 'typeof NaN' là gì?
💡 Lời giải chi tiết:
Mặc dù NaN viết tắt của 'Not-a-Number', nhưng trong hệ thống kiểu của JavaScript, nó vẫn được định nghĩa là một giá trị thuộc kiểu số. Kết luận Lý giải 'number'
Câu 9:Cơ chế 'Hoisting' hoạt động như thế nào với các biến được khai báo bằng từ khóa 'let'?
💡 Lời giải chi tiết:
Mặc dù 'let' được hoisting nhưng JavaScript ngăn chặn việc truy cập chúng trước dòng mã khai báo thực tế, gây ra lỗi tham chiếu. Kết luận Lý giải 'Được đưa lên đầu phạm vi nhưng nằm trong vùng chết tạm thời (TDZ) cho đến khi được khai báo'
Câu 10:Phương thức nào được sử dụng để chuyển đổi một chuỗi JSON thành một đối tượng JavaScript?
💡 Lời giải chi tiết:
Hàm JSON.parse() nhận vào một chuỗi văn bản có định dạng JSON và phân tích cú pháp để tạo ra đối tượng hoặc giá trị JavaScript tương ứng. Kết luận Lý giải 'JSON.parse()'
Câu 11:Trạng thái nào sau đây KHÔNG thuộc về một Promise?
💡 Lời giải chi tiết:
Một Promise trong JavaScript chỉ có ba trạng thái chính là đang chờ (pending), đã hoàn thành (fulfilled) và đã bị từ chối (rejected). Kết luận Lý giải 'Processing'
Câu 12:Cú pháp 'Spread' (...) có tác dụng gì khi áp dụng vào một mảng?
💡 Lời giải chi tiết:
Toán tử spread cho phép mở rộng một mảng (hoặc iterable) tại những nơi mà danh sách các đối số hoặc phần tử được mong đợi. Kết luận Lý giải 'Trải các phần tử của mảng đó thành các phần tử riêng lẻ'
Câu 13:Lợi ích chính của việc sử dụng 'use strict' ở đầu file JavaScript là gì?
💡 Lời giải chi tiết:
Chế độ nghiêm ngặt (strict mode) giúp lập trình viên viết mã sạch hơn bằng cách tạo ra lỗi khi gặp các hành động như gán giá trị cho biến chưa được khai báo. Kết luận Lý giải 'Ngăn chặn việc sử dụng các biến chưa khai báo và bắt lỗi các hành vi không an toàn'
Câu 14:Phương thức 'Array.reduce()' dùng để làm gì?
💡 Lời giải chi tiết:
Hàm reduce() áp dụng một hàm lên từng phần tử của mảng (từ trái sang phải) để cộng dồn hoặc tổng hợp thành một kết quả cuối cùng. Kết luận Lý giải 'Tính toán và tích lũy các phần tử mảng để trả về một giá trị duy nhất'
Câu 15:Trong trình duyệt, giá trị của 'this' khi được gọi ở phạm vi toàn cục (không trong strict mode) là gì?
💡 Lời giải chi tiết:
Ở môi trường trình duyệt, đối tượng toàn cục cao nhất là window, và khi 'this' không nằm trong hàm hay đối tượng nào, nó sẽ tham chiếu đến window. Kết luận Lý giải 'Đối tượng window'
Câu 16:Mã thực thi bên trong 'setTimeout(callback, 0)' sẽ chạy khi nào?
💡 Lời giải chi tiết:
Dù thời gian chờ là 0, hàm callback vẫn được đưa vào hàng đợi task và chỉ được đẩy vào stack thực thi khi stack đã hoàn toàn trống. Kết luận Lý giải 'Sau khi tất cả các mã đồng bộ hiện tại đã thực hiện xong'
Câu 17:Phương thức 'Array.filter()' trả về kết quả gì?
💡 Lời giải chi tiết:
Phương thức filter() tạo ra một mảng mới lọc ra các phần tử từ mảng gốc dựa trên kết quả trả về là true của hàm kiểm tra. Kết luận Lý giải 'Một mảng mới chứa tất cả các phần tử thỏa mãn điều kiện'
Câu 18:Cú pháp 'Template Literals' sử dụng ký tự nào để bao quanh chuỗi?
💡 Lời giải chi tiết:
Template literals (ES6) được định nghĩa bằng cặp dấu huyền (backtick) cho phép chèn biểu thức và viết chuỗi trên nhiều dòng. Kết luận Lý giải 'Dấu backtick (')'
Câu 19:Toán tử 'Nullish Coalescing' (??) trả về giá trị bên phải khi nào?
💡 Lời giải chi tiết:
Khác với toán tử OR (||), toán tử ?? chỉ phản hồi với hai giá trị vô định là null và undefined để tránh việc bỏ qua các giá trị hợp lệ như 0 hoặc chuỗi rỗng. Kết luận Lý giải 'Khi giá trị bên trái là 'null' hoặc 'undefined''
Câu 20:Phương thức 'bind()' được sử dụng để làm gì?
💡 Lời giải chi tiết:
Hàm bind() trả về một bản sao của hàm ban đầu nhưng được liên kết vĩnh viễn với một đối tượng cụ thể cho từ khóa 'this'. Kết luận Lý giải 'Để tạo ra một hàm mới với giá trị 'this' được gán cố định'
Câu 21:Kiểu dữ liệu nào sau đây là kiểu dữ liệu tham chiếu (Reference Type) trong JavaScript?
💡 Lời giải chi tiết:
Trong khi chuỗi, số và boolean là các kiểu nguyên thủy (primitive), thì đối tượng, mảng và hàm được lưu trữ theo tham chiếu đến địa chỉ bộ nhớ. Kết luận Lý giải 'Object'
Câu 22:Phương thức 'event.preventDefault()' có tác dụng gì?
💡 Lời giải chi tiết:
Ví dụ điển hình là sử dụng preventDefault() để ngăn trình duyệt tải lại trang khi người dùng nhấn nút submit trong một thẻ 'form'. Kết luận Lý giải 'Ngăn chặn hành vi mặc định của trình duyệt đối với sự kiện đó'
Câu 23:Sự khác biệt giữa 'Function Declaration' và 'Function Expression' về mặt Hoisting là gì?
💡 Lời giải chi tiết:
Bạn có thể gọi một hàm được khai báo bằng từ khóa 'function' trước khi dòng mã định nghĩa nó xuất hiện, nhưng không thể làm vậy với hàm được gán vào biến. Kết luận Lý giải 'Khai báo hàm được hoisted hoàn toàn, còn biểu thức hàm thì không'
Câu 24:Tham số 'Rest' (ký hiệu ...) trong khai báo hàm dùng để làm gì?
💡 Lời giải chi tiết:
Rest parameter cho phép một hàm chấp nhận số lượng đối số không xác định bằng cách gom chúng lại thành một mảng đại diện. Kết luận Lý giải 'Để thu thập tất cả các đối số còn lại vào một mảng duy nhất'
Câu 25:Câu lệnh 'async' đặt trước một hàm có ý nghĩa gì?
💡 Lời giải chi tiết:
Mọi hàm được đánh dấu bằng 'async' sẽ tự động bọc giá trị trả về của nó bên trong một Promise đã được giải quyết (resolved). Kết luận Lý giải 'Làm cho hàm đó luôn trả về một Promise'