Skip to content

tranchuyen282/javascript-interview-questions-developer

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

15 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Danh sách những câu hỏi trong phỏng vấn Javascript

Những lý thuyết này cung cấp cho bạn danh sách các câu hỏi phỏng vấn JavaScript thường được hỏi với câu trả lời cho người mới bắt đầu. Các câu hỏi không sắp xếp theo thứ tự khó dần lên bạn có thể lướt hết qua mọi thứ để thử thách bản thân mình.

Nếu bạn có câu hỏi phỏng vấn JavaScript nào hay thì chia sẻ cho mọi người bằng cách bằng cách tạo issue hoặc pull request cho mình 🚀.

Danh sách các ngôn ngữ khác:

Let's go !!!

Câu 0: Javascript là gì?

JavaScript, theo phiên bản hiện hành, là một ngôn ngữ lập trình thông dịch được phát triển từ các ý niệm nguyên mẫu. Ngôn ngữ này được dùng rộng rãi cho các trang web (phía người dùng) cũng như phía máy chủ (với Nodejs).


Câu 1: Sự khác nhau giữa JavaScript và JScript là gì?

Đơn giản bạn có thể nói JScript giống như JavaScript, nhưng nó được cung cấp bởi Microsoft.


Câu 2: Trong javascript đối tượng window được sử dụng để làm gì?

Đối tượng window được tạo tự động bởi trình duyệt đại diện cho một cửa sổ trình duyệt. Nó được sử dụng để hiển thị hộp thoại bật lên như hộp thoại alert, confirm, v.v. và mọi thứ trong Javascript như object, functions, variables đều có thể trở thành window object bao gồm cả HTML DOM.

Ví dụ:

window.document.getElementById("header");
hoặc:
document.getElementById("header");


Câu 3: Sự khác nhau giữa == và === là gì?

Toán tử == chỉ kiểm tra tính bằng nhau, còn === kiểm tra tính bằng nhau và giá trị kiểu dữ liệu tức là phải cùng kiểu dữ liệu.

Ví dụ:

var number1 = 12;
var number2 = '12';

console.log('log 1: ', number1 == number2)
console.log('log 2: ', number1 === number2)
Đáp án:

log 1: true
log 2: false


Câu 4: Negative Infinity là gì?

Negative Infinity là một số trong JavaScript có thể được bắt nguồn bằng cách chia số âm cho 0. Khi nào sử dung nó, khi nó là một số hoặc Number object và nó sẽ return về undefined.

Ví dụ:

var my_number = 100;
my_number.NEGATIVE_INFINITY;

console.log(my_number)
Đáp án:

undefined


Câu 5: Cách để xử lý các ngoại lệ trong JavaScript?

Sử dụng khối try/catch, chúng ta có thể xử lý các ngoại lệ trong JavaScript. JavaScript hỗ trợ các từ khóa try, catch, finally, throw để xử lý ngoại lệ.

Ví dụ:

function check(x) {
  try {
    if (x == "") throw "empty";
    if (isNaN(x)) throw "not a number";
    x = Number(x);
    if (x < 5) throw "too low";
    if (x > 10) throw "too high";
  }
  catch (err) {
    console.log("catch ", err)
  }
}

console.log(check(""))
console.log(check("test"))
console.log(check(55))
Đáp án:

catch empty
undefined
catch not a number
undefined
catch too high
undefined


Câu 6: Hàm isNaN() là gì?

Hàm isNaN() trả về true nếu giá trị của biến không phải là một số.

Ví dụ:

console.log(isNaN(123))
console.log(isNaN(0))
console.log(isNaN('Hello'))
console.log(isNaN('2005/12/12'))
console.log(isNaN(''))
console.log(isNaN(true))
console.log(isNaN(undefined))
Đáp án:

false
false
true
true
false
false


Câu 7: Cách để comment trong Javascript?

Sử dụng // cho một dòng

hoặc

sử dụng /* nội dung */ cho nhiều dòng

Ví dụ:

// Khai báo biến
var number = 2;

/*
  Đây là cách
  để comment
  nhiều dòng
*/
var girl_friend = null;

Câu 8: Tại sao 0.1 + 0.2 không bằng 0.3 ?

Vấn đề này liên quan đến việc Javascript lưu trữ dữ liệu float ở dạng nhị phân chính xác tới từng con số sau dấu phẩy.

Giải pháp:

  • Sử dụng hàm toFixed()
  • Mẹo nhỏ là nhân với 10 và chia cho 10
  • Tham khảo các hàm làm tròn như round(), v.v.

Ví dụ:

console.log(0.1 + 0.2)

// Amazing !
var x = (0.2 * 10 + 0.1 * 10) / 10;
console.log(x)  

// Sử dụng toFixed()
var number = 0.1 + 0.2;
console.log(number.toFixed(2))
Đáp án:

0.30000000000000004
0.3
0.3


Câu 9: Phân biệt giữa Function Declaration và Function Expression.

Function declaration sử dụng từ khóa function rồi đến tên hàm. Còn Function expression bắt đầu bằng var, let hoặc const, theo sau là tên của hàm và toán tử =.

Ví dụ:

// Function Declaration
 function sum(x, y) {
   return x + y;
 };
 
 // Function Expression: ES5
 var sum = function(x, y) {
   return x + y;
 };
 // Function Expression: ES6+
 const sum = (x, y) => { return x + y };

Câu 10: Tại sao Math.max() lại nhỏ hơn Math.min().

Khi chạy code Math.max() > Math.min(), giá trị trả về là False, nghe có vẻ không hợp lý. Tuy nhiên, nếu không có tham số nào được truyền vào, Math.min() trả về InfinityMath.max() trả về -Infinity. Vậy nên Math.max() < Math.min().

Nếu tham số xuất hiện là infinity và một số nào khác, kết quả trả về sẽ là số có giá trị đó.

Ví dụ:

var infinity = 5

var value1 = Math.min(1)
var value2 = Math.min(1, infinity)
var value3 = Math.min(1, -infinity)

console.log(value1)
console.log(value2)
console.log(value3)
Đáp án:

1
1
-5


Câu 11: Closure trong Javascript là gì?

Dể hiểu, closure là 1 hàm nội truy cập đến các biến bên ngoài phạm vi của nó. Closure có thể được sử dụng để implement privacy và tạo ra các function factory.

Ví dụ:

const arr = [1, 2, 3, 4];

for (var i = 0; i < arr.length; i++) {
  setTimeout(function() {
    console.log(i);
  }, 10);
}
Đáp án:

4
4
4
4

Lý do là bởi vì hàm setTimeout sẽ tạo ra 1 function (closure) có thể truy cập phạm vi bên ngoài nó, vòng loop sẽ chứa index i. Sau 10ms, hàm được thực thi và nó sẽ log ra giá trị của i, là giá trị cuối cùng của vòng lặp (4).


Câu 12: Hàm encodeURI() là gì?

Hàm này mã hóa các ký tự đặc biệt, ngoại trừ :, /? : @ & = + $ #

Để mã hóa ngược chuỗi đó lại mình sử dụng hàm decodeURI().

Ví dụ:

var uri = "my test.asp?name=ståle&car=saab";
var res = encodeURI(uri);

console.log(res)
Đáp án:

my%20test.asp?name=st%C3%A5le&car=saab


Câu 13: Array() khác với [] như nào trong khi tạo ra một array trong JavaScript?

Nếu sử dụng cách tạo array initializer nó sẽ tạo ra danh sách các phần tử trong mảng và được ngăn cách bởi dấu phẩy.

Ví dụ:

var arr1 = [5]
var arr2 = new Array(5)

console.log(arr1)
console.log(arr2)
Đáp án:

[ 5 ]
[ <5 empty items> ]


Câu 14: Strict mode trong JavaScript là gì?

Strict theo nghĩa tiếng Việt là "nghiêm khắc". Strict Mode là một quy mẫu nghiêm khắc trong Javascript. Nếu như việc viết code bình thường là Normal mode, thì Strict Mode sẽ có thêm các quy định khác so với Normal mode.

Ví dụ:

"use strict";

function foo(){
  var bar = 0;
  return bar;
}

bar = 1;
Đáp án:

Xảy ra lỗi: ReferenceError: bar is not defined


Câu 15: Variable typing trong JavaScript là gì?

JavaScript là một ngôn ngữ rất lỏng lẻo. Biến chỉ được xác định khi giá trị được gán và có thể thay đổi khi biến xuất hiện trong các ngữ cảnh khác nhau. Lên đơn giản nó là kiểu dữ liệu của biến đó.

Để kiểm tra kiểu dữ liệu của biến đó ta dùng typeof trong Javascript.

Ví dụ:

var length = 16;
var lastName = "Johnson";
var x = { firstName: "John", lastName: "Doe" };

console.log(typeof length)
console.log(typeof lastName)
console.log(typeof x)
Đáp án:

number
string
object


Câu 16: Các kiểu dữ liệu trong Javascript là gì?

Javascript có những kiểu dữ liệu sau:

  • Number
  • String
  • Boolean
  • Object
  • Undefined

Ví dụ:

var a = 5;
var b = "Hello";
var c = true;
var d = { id: 1, name: "Lyly" };

console.log(typeof a)
console.log(typeof b)
console.log(typeof c)
console.log(typeof d)
console.log(typeof e)
Đáp án:

number
string
boolean
object
undefined


Câu 17: this trong Javascript là gì?

Từ khóa this dùng để chỉ đối tượng từ nơi nó được gọi.

Ví dụ:

var Student = {
  name: "Lyly",
  age: 20,
  getName: function(){
      return this.name;
  }
};

console.log(Student.getName())
Đáp án:

Lyly


Câu 18: Khác nhau giữa ViewState và SessionState là gì?

  • ViewState là dành riêng cho một trang trong phiên.

  • SessionState dành riêng cho dữ liệu cụ thể của người dùng có thể được truy cập trên tất cả các trang trong ứng dụng web.


Câu 19: Làm sao để thay đổi style/class của element?

Có thể sử dụng document để thay đổi style/class.

Ví dụ:

document.getElementById("myId").style.fontSize = "20px";

// or

document.getElementById("myId").className = "newclass";

Câu 20: Các cấu trúc lặp trong Javascript là gì?

Có các vòng lặp sau:

  • for
  • while
  • do-while loops

Ví dụ:

var arr = ["apple", "banana", "mango", "cherry"]

// Sử dụng for
for (let i = 0; i < arr.length; i++) {
  console.log(arr[i]);
}

// Sử dụng while
let j = 0;
while (j < arr.length) {
  console.log(arr[j]);
  j++;
}

// Sử dụng do-while loops
let k = 0;
do {
  console.log(arr[k]);
  k++;
} while (k < arr.length)
Đáp án:

cherry
apple
banana
mango


Câu 21: Kết quả của 5 + 2 + "7" là gì?

Vì 3 và 2 là số nguyên, chúng sẽ cộng vào với nhau và kết quả là số. Còn 7 là một chuỗi, nên Javascipt sẽ hiểu thành nối chuỗi. Vì vậy, kết quả sẽ là 77.

Ví dụ:

console.log(5 + 2 + "7");
Đáp án:

77


Câu 22: Chức năng của delete là gì?

delete dùng để xóa các property cũng như các giá trị.

Ví dụ:

var student = { name: 'Lyly', age: 20 };

delete student.age;

console.log(student)
Đáp án:

{ name: 'Lyly' }


Câu 23: Hàm pop() trong Javascript để làm gì?

pop() trong Javascript dùng để lấy phần tử cuối cùng trong mảng. Điều này thì trái ngược với hàm shift().

Ví dụ:

var number = ["one", "two", "three", "four"]

console.log(number.pop())
console.log(number.shift())
Đáp án:

four
one


Câu 24: Kết quả in ra là gì?

Ví dụ:

var myArray = [[[]]];

console.log(myArray)
Đáp án:

Là một mảng 3 chiều [ [ [] ] ]


Câu 25: letconst trong Javascript là gì?

Từ khóa let & const được giới thiệu trong phiên bản ES6 với tầm nhìn tạo ra hai loại biến khác nhau trong javascript, một loại là bất biến và loại khác là có thể thay đổi.

  • const: Nó được sử dụng để tạo ra một biến bất biến. Biến không thay đổi là các biến có giá trị không bao giờ thay đổi trong vòng đời hoàn chỉnh của chương trình.

  • let: let được sử dụng để tạo một biến có thể thay đổi. Các biến có thể thay đổi là các biến bình thường như var có thể thay đổi bất kỳ số lượng thời gian nào.

Ví dụ:

let name  = "Lyly";

const age = 18;

name = "John";
age = 20;

console.log(name)
console.log(age)
Đáp án:

John
TypeError: Assignment to constant variable.


Câu 26: Làm sao để thêm hoặc xóa sửa trong object Javascript?

Ta có thể thêm một thuộc tính vào một đối tượng bằng object.property_name = value, delete object.property_name để xóa một thuộc tính.

Ví dụ:

let user = new Object();

user.name = 'Lyly';
user.age = 20;

console.log(user);

delete user.age;

console.log(user);
Đáp án:

{ name: 'Lyly', age: 20 }
{ name: 'Lyly' }


Câu 27: Cách để xóa các phần tử giống nhau trong mảng sử dụng ES6?

Dưới đây là một số cách:

Ví dụ:

var array = [1, 2, 6, 5, 3, 2, 6];

// Sử dụng Set
console.log(...new Set(array))

// Sử dụng filter
console.log(
  array.filter((item , index ) => 
    array.indexOf(item) === index 
  )
)

// Sử dụng reduce
console.log(
  array.reduce((uniq, item) => 
    uniq.includes(item) ? uniq : [...uniq, item], [] 
  )
)
Đáp án:


1 2 6 5 3
[ 1, 2, 6, 5, 3 ]
[ 1, 2, 6, 5, 3 ]


Câu 28: Khác nhau giữa từ khóa undefinednull là gì?

Khi bạn khởi tạo ra một biến nhưng không gán giá trị cho nó thì sẽ là undefined. Còn null là một object.

Ví dụ:

var a;

console.log(typeof a)
console.log(typeof null)
Đáp án:

undefined
object


Câu 29: Một số Framework để test Javascript là gì?

Các framework phổ biến nhất hiện nay:

  • Unit.js
  • Jasmine
  • Karma
  • Chai
  • AVA
  • Mocha
  • JSUnit
  • QUnit
  • Jest

Ví dụ:

// Sử dụng Chai
var answer = 43;

expect(answer).to.equal(42);
Đáp án:

AssertionError: expected 43 to equal 42.


Câu 30: exportimport là gì?

export hay import là cách để ta tạo ra các module trong Javascript. Bằng cách đó, ta có thể chia các phần nhỏ trong dự án để dễ quản lý. import cho phép ta lấy một số biến hoặc một phương thức nào đó của file. Còn export là biến một file thành một module. Xem ví dụ để hiểu hơn.

Ví dụ:

// person.js

let name = 'Lyly', occupation = 'developer', age = 20;

export {
  name,
  age,
}; 

//index.js

import { name, age } from './person';

console.log(name);
console.log(age);
Đáp án:

Lyly
20


Câu 31: Làm sao để chuyển đổi ngày trong Javascript thành tiêu chuẩn ISO?

Hàm toISOString() được sử dụng để chuyển đổi ngày javascript thành tiêu chuẩn ISO. Nó chuyển đổi đối tượng Ngày JavaScript thành một chuỗi, sử dụng tiêu chuẩn ISO.

Ví dụ:

var date = new Date();
var n = date.toISOString();

console.log(n);
// YYYY-MM-DDTHH:mm:ss.sssZ

Câu 32: Cách để clone một object trong Javascript?

Hàm Object.assign() được sử dụng để clone một đối tượng trong Javascript. Ngoài ra bạn cũng có thể sử dụng clone của lodash. Lodash là một framework sử lý mạnh mẽ mảng và object. Xem thêm tại Lodash

Ví dụ:

var x = { name: "Lyly" };
var y = Object.assign({}, x); 

console.log(y)
Đáp án:

{ name: 'Lyly' }


Câu 33: Cách để tạo mảng trong Javascript?

Có 3 cách khác nhau để tạo mảng trong Javascript. Xem ví dụ

Ví dụ:

var arr1 = [1, 2, 3, 4];

var arr2 = new Array();

var arr3 = new Array(1, 2, 3, 4);

console.log(arr1)
console.log(arr2)
console.log(arr3)
Đáp án:

[ 1, 2, 3, 4 ]
[]
[ 1, 2, 3, 4 ]


Câu 34: Các sự kiện chuột HTML DOM là gì?

Một số sự kiện chuột trong DOM như:

  • onclick
  • ondblclick
  • mousemove
  • mousedown
  • mouseover
  • mouseout
  • mouseup

Câu 35: Giá trị in ra màn hình là gì?

Ví dụ:

console.log(undefined * 2)

console.log(null * 2)

console.log("" * 2)
Đáp án:

NaN
0
0


Câu 36: Tại sao 018 - 017 = 3 trong Javascript?

Việc 018 - 017 trả về 3 là kết quả của chuyển đổi loại im lặng. Trong trường hợp này, ta nói về số bát phân.

Ví dụ:

console.log(018 - 017)
Đáp án:

3


About

Danh sách những câu hỏi trong phỏng vấn Javascript 📝 (Working in progress)

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published