Bạn là một lập trình viên Javascript và đang chuẩn bị cho buổi phỏng vấn với nhà tuyển dụng mong muốn có được công việc mơ ước. Đừng bỏ qua bài viết này của Glints! Chúng tôi tổng hợp những câu hỏi phỏng vấn Javascript quan trọng và hữu ích nhất, giúp bạn tự tin hơn trong các buổi phỏng vấn sắp tới. Hãy cùng khám phá!
- Lớp Và Đối Tượng Trong C++: Tìm Hiểu Cách Truy Cập Và Phạm Vi Truy Cập
- Top 13 phần mềm lập trình C/C++ tốt nhất 2022
- Nghề lập trình là gì? Lập trình viên trong tiếng Anh gọi là gì?
- Top 05 khóa học lập trình Java online dành cho người mới bắt đầu
- Lộ Trình Học Cấu Trúc Dữ Liệu Và Giải Thuật (Phần 2)
Contents
- 1 Các Câu Hỏi Phỏng Vấn Javascript và Cách Trả Lời
- 1.1 Giải thích phép so sánh trong JavaScript
- 1.2 Callback function là gì? Cho một ví dụ đơn giản.
- 1.3 Toán tử && để làm gì?
- 1.4 Primitive là gì? Nêu các primitive value trong JavaScript
- 1.5 Toán tử || dùng để làm gì trong JavaScript
- 1.6 Nêu sự khác biệt giữa undefined và null
- 1.7 Hãy cho biết Falsy value và Truthy value là gì? Có các falsy value nào trong JavaScript?
- 1.8 IIFEs (Immediately Invoked Function Expressions) là gì?
- 1.9 Làm cách nào để bạn kiểm tra một số có phải là số nguyên hay không?
- 1.10 Phân biệt giữa anonymous và named functions?
- 1.11 Ba giai đoạn của sự lan truyền sự kiện (event propagation) là gì?
- 1.12 Kết quả của đoạn code sau là gì?
- 1.13 Từ khóa “this” hoạt động như thế nào? Bạn hãy cho một ví dụ
- 1.14 Tại sao Math.max() nhỏ hơn Math.min()?
- 1.15 Tại sao 018 Trừ 017 lại bằng 3?
- 1.16 AJAX là gì? Những ưu điểm và nhược điểm của nó là gì?
- 1.17 Function Expression khác thế nào với Function Declaration?
- 1.18 Hoisting là gì?
- 1.19 Bạn hãy phân tích biết sự khác nhau giữa bind, call và apply?
- 1.20 Điều gì sẽ xảy ra nếu bạn xác định một biến mà không có từ khóa?
- 1.21 Promise có thể có ở trạng thái nào?
- 1.22 Nêu ưu điểm và nhược điểm của việc sử dụng Promises
- 2 Lời kết
Các Câu Hỏi Phỏng Vấn Javascript và Cách Trả Lời
Giải thích phép so sánh trong JavaScript
1. Phép so sánh bằng
Bạn đang xem: Bộ Câu Hỏi Phỏng Vấn Javascript Hữu Ích
Phép so sánh === (!=) trong Javascript tuân theo các quy tắc sau:
- Nếu hai vế của phép so sánh khác kiểu dữ liệu, kết quả là false.
- Khi hai vế là kiểu Number, nếu một trong hai là NaN, kết quả trả về là false. Nếu không, ta so sánh giá trị.
- Khi hai vế là kiểu String, ta cần so sánh nội dung. Nếu nội dung giống nhau, kết quả là true. Nội dung khác nhau sẽ trả về false.
- Khi hai vế là kiểu Boolean, nếu cùng true hoặc cùng false, kết quả là true. Ngược lại, kết quả sẽ là false.
- Khi hai vế là kiểu đặc biệt như undefined, null, nếu cùng underfined hoặc cùng thì là true. Ngược lại, kết quả là false.
Phép so sánh ==(!=) cũng tuân theo các quy tắc tương tự.
2. Phép so sánh hơn kém
Phép so sánh hơn kém bao gồm >, <, >=, <= tuân theo các quy tắc sau:
-
Trường hợp 1: Nếu cả hai vế cùng kiểu
- Cả hai vế đều cùng kiểu Number, ta so sánh theo giá trị.
- Cả hai vế đều cùng kiểu String, ta so sánh theo thứ tự UniCode.
-
Trường hợp 2: Nếu cả hai vế khác kiểu, ta cần tuân theo những quy tắc sau:
- Nếu một trong hai vế là kiểu Number và ta có thể chuyển vế còn lại về kiểu Number, chuyển về kiểu Number và so sánh giá trị. Đặc biệt, nếu một trong hai là kiểu NaN, kết quả là false.
- Nếu một trong hai vế là kiểu String và vế còn lại có thể chuyển về kiểu String, ta sẽ chuyển về kiểu String và thực hiện so sánh theo Unicode.
- Nếu một trong hai vế là kiểu Number, vế còn lại là kiểu String, ta sẽ chuyển kiểu String về kiểu Number và so sánh theo giá trị số.
- Nếu một trong hai vế không thể chuyển về kiểu Number/String hoặc khi chuyển trở thành giá trị NaN, kết quả là false.
Callback function là gì? Cho một ví dụ đơn giản.
Callback function, hay còn gọi là hàm gọi lại, là một hàm chỉ được thực thi sau khi hàm khác đã thực thi xong.
Ví dụ:
function writeBlog(topic, callback) {
alert(`Bắt đầu viết blog về ${topic}.`);
// Sau đó thực thi callback function được truyền vào
callback();
}
writeBlog('JavaScript', function() {
alert('Viết blog xong rồi nhé!');
});
Nếu bạn chạy đoạn code trên, bạn sẽ nhận được hai thông báo. Thông báo đầu tiên là “Bắt đầu viết blog về JavaScript” và thông báo thứ hai là “Viết blog xong rồi nhé!”.
Toán tử && để làm gì?
Toán tử && trong JavaScript trả về giá trị true nếu cả hai toán hạng là true, ngược lại sẽ trả về false.
Primitive là gì? Nêu các primitive value trong JavaScript
Trong JavaScript, có hai loại dữ liệu: Kiểu nguyên thủy (primitive) và object.
Kiểu nguyên thủy là bất biến, một kiểu nguyên thủy không phải là object, vì vậy chúng không có các phương thức riêng của mình.
Có sáu loại nguyên thủy trong JS:
- Boolean: true hoặc false
- Undefined: một biến được khai báo nhưng chưa được cung cấp giá trị
- Null: không có giá trị
- Symbol: một giá trị duy nhất không bằng bất kỳ giá trị nào khác (được giới thiệu trong ES6)
- Number: số nguyên, số thập phân..
- String: chuỗi ký tự
Toán tử || dùng để làm gì trong JavaScript
Toán tử || trong JavaScript trả về true nếu một trong hai số hạng là true.
Nêu sự khác biệt giữa undefined và null
Undefined có nghĩa là không xác định. Giá trị của biến là undefined trong JavaScript khi bạn khai báo một biến nhưng chưa gán giá trị cho nó.
Xem thêm : Top 12 cuốn sách Python cơ bản cho người mới bắt đầu
Null có nghĩa là giá trị rỗng hoặc giá trị không tồn tại. Một biến null là khi chúng không có giá trị.
Sự khác biệt giữa null và undefined: undefined có kiểu giá trị là undefined, nhưng null lại là một object.
Hãy cho biết Falsy value và Truthy value là gì? Có các falsy value nào trong JavaScript?
Falsy values là giá trị trong JavaScript mà khi ta ép kiểu về Boolean sẽ cho ra giá trị false.
Ngược lại, truthy values là những giá trị mà khi ta ép kiểu về Boolean sẽ cho ra giá trị true.
Có 7 falsy values trong JavaScript:
- Số 0
- undefined
- BigInt 0n
- NaN
- null
- Boolean false
- Chuỗi rỗng “” (tương ứng với ” hay ”)
IIFEs (Immediately Invoked Function Expressions) là gì?
Một IIFE (Immediately Invoked Function Expression) được thực thi ngay sau khi nó được tạo.
Làm cách nào để bạn kiểm tra một số có phải là số nguyên hay không?
Để kiểm tra một số có phải là số nguyên hay không, cách nhanh chóng là sử dụng hàm Number.isInteger(). Tuy nhiên, cách này không giúp bạn biết số đó là số âm hay số dương.
Cách khác là lấy số đó chia số cho 1 và xem có phần dư hay không.
Phân biệt giữa anonymous và named functions?
Anonymous function, hay còn được biết đến là hàm ẩn danh, là hàm không có tên và được tạo ra trong thời gian ứng dụng đang chạy.
Ngược lại, named function, hay còn gọi là hàm được đặt tên, được sử dụng để gỡ lỗi và tìm kiếm những hàm gây ra lỗi.
Ba giai đoạn của sự lan truyền sự kiện (event propagation) là gì?
Ba giai đoạn của sự lan truyền sự kiện là propagation, capturing sau đó là bubbling.
Đầu tiên, propagation (lan truyền) xảy ra với giai đoạn capturing trước. Trong giai đoạn capturing, các sự kiện sẽ truyền từ Window qua DOM tree cho đến khi nó đến đích. Sau đó, phần tử mục tiêu được truy cập và (trong đoạn code này có thể là event.target), giai đoạn bubbling xảy ra.
Kết quả của đoạn code sau là gì?
Kết quả của đoạn code sau trả về false.
Từ khóa “this” hoạt động như thế nào? Bạn hãy cho một ví dụ
Từ khóa “this” được dùng để đại diện cho một đối tượng. Cụ thể, đối tượng ở đây là đối tượng đang thực thi code JS hiện tại.
Ví dụ:
function state() {
console.log(this.name);
}
var name = "NY";
var obj1 = { name: "IN", state: state };
var obj2 = { name: "CA", state: state };
state(); // "NY"
obj1.state(); // "IN"
obj2.state(); // "CA"
Tại sao Math.max() nhỏ hơn Math.min()?
Math.min() trả về infinity và Math.max() trả về -infinity nếu không có đối số nào được đưa ra. Đây là phần của đặc tả cho các phương thức min() và max(), và nó có logic đằng sau.
Ví dụ:
Math.min(1); // 1
Math.min(1, infinity); // 1
Math.min(1, -infinity); // -infinity
Xem thêm : Phương pháp tự học lập trình cho người mới bắt đầu
Nếu -infinity là đối số mặc định của Math.min(), thì mọi kết quả sẽ là -infinity, điều này là vô dụng. Trong khi đó, nếu đối số mặc định là infinity, thì việc thêm bất kỳ đối số nào khác, kết quả sẽ trả về số đó. Đó chính là hành vi mà chúng ta muốn.
Tại sao 018 Trừ 017 lại bằng 3?
Kết quả của việc chuyển đổi kiểu cho ra kết quả 018 – 017 trả về 3. Đây là một trường hợp của số bát phân (octal numbers).
Trong JavaScript, tiền tố 0 sẽ chuyển đổi bất kỳ số nào đứng sau thành số bát phân. Tuy nhiên, số 8 không được sử dụng trong hệ bát phân nên với các số có chứa số 8, chúng sẽ trở về số thập phân thông thường.
Do đó 018 – 017 tương đương với 18 (số thường) – 15 (bát phân của 017) và trả về kết quả là 3.
AJAX là gì? Những ưu điểm và nhược điểm của nó là gì?
AJAX là viết tắt của Asynchronous JavaScript And XML. AJAX hoạt động như sau: một yêu cầu XHR (XML HTTP Request) được tạo bởi JavaScript sẽ được gửi đến máy chủ mỗi khi một sự kiện xảy ra trên trang web. Máy chủ sẽ xử lý yêu cầu và trả về phản hồi cho trang web, và các hành động cần thiết được thực hiện.
Ưu điểm của AJAX:
- Cập nhật một trang web mà không cần tải lại nó.
- Yêu cầu sau đó nhận dữ liệu từ máy chủ sau khi trang đã tải xong.
- Gửi dữ liệu cho máy chủ ở background.
Nhược điểm của AJAX:
- AJAX sẽ không hoạt động nếu JavaScript bị tắt.
- AJAX có thể làm cho trang web dễ bị tấn công bởi các mối đe dọa bảo mật, vì nó làm tăng kích thước mã.
- Làm cho nút quay lại của trình duyệt trở nên vô dụng.
Function Expression khác thế nào với Function Declaration?
Function Declaration, hay còn biết đến là khai báo hàm, thường sử dụng từ khóa function, sau đó là tên của hàm.
Ngược lại, Function Expression, hay còn gọi là biểu thức hàm, bắt đầu bằng var, const hoặc let, sau đó là tên của hàm và toán tử gán =.
Hoisting là gì?
Hoisting là việc JavaScript di chuyển khai báo lên đầu mọi phạm vi. Đây là một khía cạnh không xác định của JavaScript, vì vậy để tránh tạo ra lỗi, bạn nên khai báo tất cả các biến ở đầu mọi phạm vi.
Hoisting chỉ đơn giản là việc bạn có thể sử dụng một biến trước khi nó được khai báo.
Bạn hãy phân tích biết sự khác nhau giữa bind, call và apply?
- .bind() được dùng để gọi một hàm trong ngữ cảnh nhất định, nhưng không thực sự gọi hàm, chỉ sửa đổi ngữ cảnh.
- .call() và .apply() ngược lại, sẽ gọi hàm ngay lập tức và cũng sửa đổi ngữ cảnh.
Sự khác biệt giữa .call() và .apply():
- .call() chấp nhận một danh sách giá trị trở thành đối số của nó.
- .apply() chỉ chấp nhận một mảng như đối số của nó.
Vì vậy, ta sử dụng .bind() khi muốn sửa đổi ngữ cảnh và gọi hàm sau này. Sử dụng .call() hoặc .apply() khi bạn muốn sửa đổi ngữ cảnh và gọi hàm ngay lập tức.
Điều gì sẽ xảy ra nếu bạn xác định một biến mà không có từ khóa?
Về mặt kỹ thuật, nếu xác định một biến mà không có từ khoá, sẽ gây rò rỉ bộ nhớ.
Promise có thể có ở trạng thái nào?
Promise có thể ở một trong ba trạng thái sau:
- Pending (đang chờ xử lý): trạng thái ban đầu của promise.
- Fulfilled (hoàn thành): được cập nhật khi promise đã được thực hiện thành công.
- Rejected (bị từ chối): khi promise đã bị từ chối, có lỗi.
Nêu ưu điểm và nhược điểm của việc sử dụng Promises
Ưu điểm của việc sử dụng Promises:
- Không giống như các lệnh gọi lại, Promises có thể kết hợp, vì vậy có thể tránh được những địa chỉ gọi lại.
- Khi có nhiều phản hồi gửi về, bạn có thể dễ dàng thực thi mã với Promises.all.
- Với sự trợ giúp của Promise.race, bạn có thể đợi kết quả từ Promises đồng thời đang chờ xử lý.
- Đồng bộ mã không đồng bộ nếu kết hợp Promises với async/await.
Nhược điểm:
- Promise chỉ có thể hoạt động trên một giá trị/thời điểm duy nhất.
- Không sẵn có ở trình duyệt cũ.
- Chậm hơn so với việc sử dụng câu lệnh gọi lại, ảnh hưởng đến hiệu suất.
Lời kết
Trên đây bạn đã cùng Glints tìm hiểu về 20+ câu hỏi phỏng vấn Javascript phổ biến nhất hiện nay. Chúc bạn tự tin trong buổi phỏng vấn tới và thành công trong việc đạt được công việc mơ ước.
Nguồn: https://laptrinhc.edu.vn
Danh mục: Tài liệu IT