Categories: Tài liệu IT

Bộ Câu Hỏi Phỏng Vấn Javascript Đáng Chú Ý

Published by

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

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:

  • 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ùng false, 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.

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ặc false
  • 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?

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).

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().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().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ả

This post was last modified on Tháng Năm 11, 2024 11:57 chiều

Đinh Thái Hoàng

Đinh Thái Hoàng - tác giả của Laptrinhc.edu.vn, chuyên sâu trong lĩnh vực lập trình. Trang web chia sẻ kiến thức, hướng dẫn và tin tức về lập trình, giúp bạn khám phá thế giới mã nguồn và nâng cao kỹ năng coder.

Published by

Bài đăng mới nhất

Tổng hợp app bán hàng online uy tín nhất tại Việt Nam

Tổng hợp app bán hàng online uy tín nhất tại Việt Nam

Khám phá và tận dụng tiềm năng kinh doanh trên nhiều nền tảng là điều…

6 ngày ago

HỌC THIẾT KẾ MOBILE APP Ở ĐÂU UY TÍN?

Mobile App đang trở thành một phần thiết yếu trong cuộc sống hiện đại. Với…

6 ngày ago

Cách phá mật khẩu Windows bằng DLC Boot

Bạn đã bao giờ quên mật khẩu máy tính và không biết phải làm sao?…

6 ngày ago

Cách kiểm tra và cài đặt Driver cho Windows 10 chuẩn nhất

Driver chính là phần mềm giúp hệ điều hành nhận diện phần cứng trên máy…

6 ngày ago

Top 10 công cụ viết phần mềm tốt nhất

Hiện nay, lập trình viên không cần phải thực hiện toàn bộ công việc lập…

6 ngày ago

Những Công Ty Lập Trình Ứng Dụng Cho IOS Hàng Đầu Việt Nam

Lập trình ứng dụng cho iOS không chỉ đơn thuần là một quyết định khó…

6 ngày ago