Bạn là một lập trình viên Javascript đang chuẩn bị cho buổi phỏng vấn tuyển dụng để có cơ hội làm việc trong công việc mơ ước của mình. Đừng bỏ lỡ bài viết dưới đây của Glints vì chúng tôi sẽ giới thiệu cho bạn bộ câu hỏi phỏng vấn Javascript hữu ích, giúp bạn tự tin hơn trong bất kỳ buổi phỏng vấn nào sắp tới. Hãy cùng khám phá ngay!
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
Phép so sánh ===
(!=
): Phép so sánh bằng trong Javascript tuân theo các quy tắc sau:
Bạn đang xem: Bộ Câu Hỏi Phỏng Vấn Javascript Đáng Chú Ý
- 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 1 trong 2 là NaN, kết quả trả về sẽ là
false
. Nếu không, ta phải 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ếu nội dung khác nhau, kết quả làfalse
. - Khi hai vế là kiểu Boolean, nếu cùng
true
hoặc cùngfalse
, kết quả làtrue
, còn lại sẽ ra kết quảfalse
. - Khi hai vế là kiểu đặc biệt như undefined, null, nếu như cùng undefined hoặc cùng null thì là
true
, còn lại làfalse
.
Phép so sánh ==
(!=
) cũng tuân theo các quy luật 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ả 2 vế cùng kiểu
- Cả 2 vế đều cùng kiểu Number, ta sẽ so sánh theo giá trị.
- Cả 2 vế đều cùng kiểu String, ta sẽ so sánh theo thứ tự Unicode.
-
Trường hợp 2: Nếu cả 2 vế khác kiểu, ta cần tuân theo các 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 1 trong 2 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
.
- 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 1 trong 2 là kiểu NaN, kết quả là
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 đã truyền vào
callback();
}
writeBlog('JS', function() {
alert('Viết blog xong rồi nhé!');
});
Nếu bạn chạy đoạn code trên, kết quả sẽ trả về hai thông báo. Thông báo đầu tiên là “Bắt đầu viết blog về JS.” 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 sẽ trả về giá trị true
nếu cả hai toán hạng đều 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 nên 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 Javascript:
- Boolean –
true
hoặcfalse
- Undefined – một biến được khai báo nhưng chưa được gán 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 – tất cả những gì nằm trong dấu “”.
Toán Tử ||
dùng để làm gì trong JavaScript
Toán tử ||
trả về true
nếu 1 trong 2 số hạng là true
: a || b
.
Nêu sự khác biệt giữa undefined và null
Undefined 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ó.
Null 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 trong khi null lại là 1 object.
Hãy cho biết Falsy value và Truthy value là gì? Có các falsy value nào trong JavaScript?
Xem thêm : Tìm hiểu và học Python: Giáo trình Python PDF mới nhất (Cập nhật 2023)
Falsy values là giá trị trong Javascript mà khi ta ép kiểu về Boolean sẽ cho ra giá trị false
.
Tương tự, 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
- Từ khóa undefined
- Số BigInt 0n
- Số NaN
- Từ khóa null
- Boolean false
- Chuỗi rỗng “” (tương ứng với ” hay ”)
IIFEs (Immediately Invoked Function Expressions) là gì?
Một IIFEs – viết tắt của Immediately Invoked Function Express – đượ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 số nguyên hay không, cách nhanh chóng là sử dụng hàm isInteger
. Tuy nhiên cách này sẽ không cho bạn biết số đó là số âm hay số dương.
Cách làm khác là lấy số đó chia 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 chạy ứng dụng.
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 việc 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 Javascript 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à một 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
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
là 3. Đây là một trường hợp của số bát phân (octal numbers).
Xem thêm : Ứng dụng thuật toán và cấu trúc dữ liệu lúc đi làm
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ữ 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 – Asynchronous JavaScript And XML, là một phương pháp để gửi và nhận dữ liệu từ máy chủ trong nền (asynchronously) mà không cần làm tải lại toàn bộ trang web.
AJAX hoạt động như sau: một yêu cầu XHR đượ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 sẽ được thực hiện.
Ưu điểm của AJAX:
- Cập nhật một trang web mà không cần thực sự 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ủ ở nền (background).
Nhược điểm của AJAX:
- AJAX sẽ không thể hoạt động trong trường hợp JavaScript bị vô hiệu hóa.
- AJAX có thể làm cho trang web của bạn dễ bị tấn công bởi các mối đe dọa bảo mật vì AJAX làm tăng kích thước mã.
- AJAX có thể 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?
Một Function declaration, hay còn được biết đến là khai báo hàm, thường sử dụng từ khóa function
, tên của hàm sẽ theo sau.
Ngược lại, một Function Expression, hay còn gọi là biểu thức hàm, bắt đầu bằng var
, const
hoặc let
, theo 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 scope (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 scope.
Hoisting đơ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. Chú ý rằng khi sử dụng.bind()
, nó sẽ không 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, đồng thời 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ị làm đối số của nó..apply()
chỉ chấp nhận một mảng làm đối số của nó.
Cách sử dụng: 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 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ừ khóa 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 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 nhiều phản hồi được gửi về, bạn có thể dễ dàng thực thi mã với
Promise.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ộ các mã viết không đồng bộ nếu kết hợp Promises với async/await.
Nhược điểm của việc sử dụng Promises:
- Chỉ có thể hoạt động trên một giá trị duy nhất/thời điểm.
- Không có sẵn ở những trình duyệt cũ.
- Chậm hơn so với việc dùng câu lệnh gọi lại, gây ảnh hưởng đến hiệu suất.
Lời Kết
Trên đây là những câu hỏi phỏng vấn Javascript đáng chú ý nhất hiện nay. Chúc bạn tự tin và thành công trong buổi phỏng vấn sắp tới của mình để đạt được công việc mơ ước.
Tác Giả
Nguồn: https://laptrinhc.edu.vn
Danh mục: Tài liệu IT