Mục lục bài viết
Có thể bạn chưa biết, JavaScript là ngôn ngữ lập trình phổ biến nhất trên thế giới. Theo thống kê của W3techs, JavaScript được 97% trang web sử dụng làm ngôn ngữ lập trình phía máy khách. Như vậy, chỉ cần bạn học tập và làm việc trong lĩnh vực CNTT thì không thể không tìm hiểu về ngôn ngữ lập trình này.
» Tham khảo: Bộ câu hỏi phỏng vấn IT
JavaScript là ngôn ngữ lập trình nhẹ mà các web developer (nhà phát triển web) thường sử dụng cùng với HTML và CSS để tăng thêm tính tương tác cho trang web.
Trong một số trường hợp, JavaScript có thể khai thác các thư viện của bên thứ ba để cung cấp chức năng nâng cao giúp các nhà phát triển không cần phải viết mã lại từ đầu.
Về mặt giá trị, những người mới bắt đầu sử dụng JavaScript có thể đạt được những lợi ích sau:
- Dễ học và dễ triển khai một số thành phần hoặc sự kiện nhất định trên trang web
- Được hỗ trợ bởi một cộng đồng lớn gồm nhiều nhà phát triển web trên toàn thế giới
- Giảm số lượng yêu cầu gửi đến máy chủ
- Tương thích với nhiều ngôn ngữ khác
- Nhanh và nhẹ hơn các ngôn ngữ lập trình khác
Để có thể triển khai JavaScript cho các trang web, các ứng dụng dành cho thiết bị di động hoặc phát triển trò chơi, bạn cần sử dụng tới các nền tảng học tập như BitDegree hoặc khám phá các mẫu và ứng dụng JavaScript miễn phí trên các nền tảng lưu trữ mã như GitHub.
Java là ngôn ngữ lập trình được sử dụng để tạo ra các ứng dụng máy ảo hoặc ứng dụng chạy trên trình duyệt, trong khi JavaScript là ngôn ngữ lập trình được sử dụng để chạy các đoạn mã trong trình duyệt web. Mã Java thì cần được biên dịch, còn mã JavaScript luôn ở định dạng văn bản.
Các phiên bản ban đầu của Script chỉ dành cho mục đích sử dụng nội bộ. Sau khi Netscape gửi nó cho ECMA International như một đặc điểm kỹ thuật tiêu chuẩn cho trình duyệt web, JavaScript đã đi tiên phong trong việc phát hành ECMAScript.
Kể từ đó, JavaScript đã tiếp tục phát triển cùng với các trình duyệt mới như Mozilla Firefox và Google Chrome. Thậm chí Google Chrome còn bắt đầu phát triển công cụ JavaScript hiện đại đầu tiên, được gọi là JavaScript V8, biên dịch mã byte thành mã máy gốc.
Hiện nay, JavaScript có rất nhiều thư viện cũng như framework nhằm đơn giản hóa các dự án phức tạp, chẳng hạn như jQuery, AngularJS và ReactJS.
Mặc dù nó phục vụ nhiều nhất cho các chương trình chạy trên nền web, nhưng các tính năng lập trình JavaScript còn có thể triển khai trong nhiều lĩnh vực khác nhau. Dưới đây là một số cách sử dụng cơ bản của JavaScript:
- Web và ứng dụng di động (Mobile Apps)
Sự phát triển của các framework, bao gồm các thư viện mã JavaScript, cho phép các nhà phát triển sử dụng các đoạn mã JavaScript được viết sẵn trong các dự án của họ. Điều này giúp họ tiết kiệm thời gian và công sức khỏi phải viết lại các tính năng lập trình từ đầu.
Mỗi framework JavaScript có các tính năng nhằm mục đích đơn giản hóa quá trình phát triển và gỡ lỗi.
Ví dụ, các front-end framework JavaScript như jQuery và ReactJS giúp cải thiện hiệu quả trong việc thiết kế. Trong khi đó, các framework phát triển ứng dụng di động như Cordova và Titanium lại cho phép tạo các ứng dụng gốc (Native Applications) hoặc ứng dụng lai (Hybrid Applications).
- Xây dựng Web Servers (máy chủ web) và Server Applications (ứng dụng máy chủ)
Thông qua Node.js, JavaScript cho phép các nhà phát triển xây dựng máy chủ web và cơ sở hạ tầng phụ trợ, giúp bạn tiết kiệm thời gian và công sức trong việc tạo máy chủ web.
- Hành vi tương tác trên trang web
Một trong những chức năng quan trọng nhất phải kể đến của JavaScript là thêm các tính năng động cho các trang web. Chức năng này này bao gồm hiển thị hoạt ảnh, sửa đổi mức độ hiển thị của văn bản và tạo menu thả xuống.
Mặc dù bạn có thể chỉ sử dụng mã HTML và CSS để xây dựng một trang web nhưng nó sẽ chỉ là màn hình tĩnh. Còn với JavaScript, người dùng có thể tương tác qua lại với các trang web và tạo ra trải nghiệm duyệt web tốt hơn.
Ngoài ra, JavaScript còn cho phép các developer thay đổi giá trị thuộc tính và nội dung HTML mà không cần tải lại trang web trước. Điều này là do JavaScript hỗ trợ nhiều kiểu dữ liệu như:
+ Chuỗi (String) ‒ bao gồm dữ liệu văn bản được viết bên trong dấu ngoặc kép. Ví dụ: “Xin chào”.
+ Số (Number) ‒ bao gồm các số nguyên và số dấu phẩy động trong khoảng từ -(2^53 – 1) đến (2^53 – 1).
+ Boolean – chứa giá trị đúng và sai.
+ BigInt ‒ bao gồm dữ liệu là số nguyên có độ dài tùy ý.
+ Null – chứa giá trị null.
+ Không xác định (Undefined) – bao gồm các biến được khai báo nhưng không được gán.
- Biểu tượng (Symbol) ‒ cung cấp các mã định danh duy nhất cho các đối tượng.
- Đối tượng (Object) ‒ cho các cấu trúc dữ liệu phức tạp được viết bằng dấu ngoặc nhọn. Ví dụ: {item:”Sách”, information:”Sinh học”} .
Với JavaScript, bạn cũng có thể nâng cao trải nghiệm duyệt web từ phía người dùng thông qua việc tạo, đọc và xóa cookie trong JavaScript.
- Phát triển trò chơi
JavaScript có thể giúp bạn xây dựng trò chơi nếu được sử dụng với HTML5 và Giao diện lập trình ứng dụng (API) như WebGL. Có rất nhiều công cụ trò chơi dựa trên JavaScript như Phaser, GDevelop và Kiwi.js để kết xuất đồ họa, tái chế mã và các ứng dụng đa nền tảng.
Một số trò chơi nổi tiếng được tạo bằng công cụ trò chơi JavaScript bao gồm Angry Birds, The Wizard và 2048.
JavaScript được nhúng trực tiếp vào một trang web hoặc được tham chiếu qua một tệp .js riêng biệt. Khi người dùng truy cập trang web đó, trình duyệt của họ sẽ chạy tập lệnh cùng với mã HTML và CSS ‒ tạo ra một trang chức năng được hiển thị qua tab trình duyệt.
Tập lệnh được tải xuống máy của người dùng và được xử lý ở đó. Đây là đặc trưng của ngôn ngữ phía máy khách. Điều này sẽ khác hoàn toàn với ngôn ngữ phía máy chủ, tại đây máy chủ sẽ xử lý tập lệnh trước khi gửi nó tới trình duyệt của khách truy cập.
Khi gặp một khối mã JavaScript, trình duyệt web sẽ xử lý từ trên xuống dưới vì nó phân biệt theo thứ tự. Vì thế hãy đảm bảo tham chiếu các đối tượng hoặc biến trong khối trước khi sửa đổi chúng. Biến không có giá trị sẽ dẫn đến lỗi không xác định.
Có 2 cách để thêm mã JavaScript vào trang web HTML: Internal Javascript và External Javascript.
Internal Javascript sử dụng thẻ <script> trong phần nội dung của tập lệnh HTML để đóng gói tất cả mã JavaScript.
Đây là một ví dụ về Internal Javascript với thẻ <script>:
<html>
<head>
<title>Inline JavaScript</title>
<script type="text/javascript">
alert("Hello Viet Nam");
</script>
</head>
<body>
</body>
</html>
Bạn cũng có thể nhúng tập lệnh của nó vào các thuộc tính sự kiện HTML, nhắc trình duyệt thực thi nó khi một sự kiện được kích hoạt ‒ loại tập lệnh này được gọi là Inline JavaScript:
<button onclick="alert('Click for more details')">Click</button>
Còn External JavaScript thì liên quan đến việc lưu trữ mã trong một tệp .js riêng biệt và sau đó gọi lại mã đó trong trang HTML. Các nhà phát triển thường sử dụng phương pháp này khi làm việc trên các dự án lớn, vì làm như vậy sẽ giữ cho tập lệnh được tổ chức.
Ngoài ra, nó cho phép bạn sử dụng lại tập lệnh trong nhiều trang HTML, đây là điều mà nhiều nhà phát triển đánh giá rất cao.
Ví dụ: thêm tập lệnh sau vào trang HTML cho phép bạn gọi lại tệp JavaScript bên ngoài có tên script.js:
<script src="script.js" defer></script>
Đây là một ví dụ về cách tham chiếu tệp External JavaScript:
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Time right now:</title>
<button type="button" onclick="myFunction()">Select</button>
<script src="js/script.js"></script>
Dưới đây là bộ câu hỏi phỏng vấn phổ biến về JavaScript phù hợp với từng level. Mời các bạn tham khảo!
- Có mấy loại toán tử trong JavaScript?
- Cho biết đầu ra của 2 dòng lệnh sau: Console.log(1<2<3) và Console.log(3>2>1). Hàm document.ready và hàm body.onload khác nhau như thế nào?
- Cho biết đầu ra của dòng lệnh sau: console.log(typeof typeof 1)
- Trong JavaScript, từ khóa "this" dùng để làm gì?
- Khi nào nên sử dụng hàm ẩn danh?
- Có mấy cách khai báo biến trong JavaScript?
- Nêu các loại cơ sở dữ liệu trong JavaScript
- GET và POST khác nhau ở điểm nào?
- Khi nào thì sử dụng Async và khi nào thì sử dụng Defer?
- Scope của 1 biến là gì? Có mấy loại scope trong JavaScript?
- Viết một hàm với tên tùy ý gồm một mảng các số nguyên sao cho tổng của ba phần tử liên tiếp bất kỳ phải bằng 7 và trả về giá trị true.
- Strict mode là gì?
- Host objects và Native objects khác nhau ở điểm gì?
- So sánh “==” và “===”
- Bạn có cách nào để buộc phải sử dụng Strict mode trong Node.js không?
- Bạn biết gì về chính sách same-origin trong JavaScript?
- Làm cách nào để ngăn chặn bubbling event?
- Polyfill là gì?
- Error('msg') và throw new Error(‘msg’) khác nhau ở đâu?
- Bạn đồng ý hay không đồng ý với ý kiến cho rằng: ý tưởng giữ nguyên global scope là một ý tưởng hay?
- Việc tạo phương thức private trong JavaScript có những nhược điểm gì?
- Hàm tạo bởi ES6 class và hàm tạo bởi ES5 function khác nhau ở đâu?
- Tại sao việc mở rộng các đối tượng tích hợp sẵn trong JavaScript lại không phải là một ý tưởng hay?
- Sự khác biệt giữa Const và Object.freeze() là gì?
- Anonymous Function thường sử dụng trong những trường hợp nào?
- Làm thế nào để so sánh 2 đối tượng trong JavaScript?
- Hãy nêu sự khác biệt giữa cách sử dụng foo trong "var foo = function () {}" và "function foo () {}"
- Hãy đề xuất một cách đơn giản nhất để xóa các duplicate trong một mảng bằng ES6?
- WeakMap trong ES6 có tác dụng gì
- Theo bạn, sự khác biệt lớn nhất giữa .forEach() và .map() là gì?
- Nêu một số trường hợp không nên dùng Arrow Functions trong ES6?Cách sử dụng Module pattern và Constructor/Prototype pattern khác nhau ở đâu?
- var person = Person(), function Person() {} và var person = new Person() khác nhau ở đâu?
- Nêu ví dụ về hàm curry
- Làm thế nào để deep-freeze object trong JavaScript?
Chúng tôi hy vọng rằng bài viết này có thể giúp bạn phần nào hiểu thêm về JavaScript và chức năng của nó trong các trang web và ứng dụng. Chúc các nhà phát triển web tự tin tham gia phỏng vấn nhờ bộ câu hỏi phỏng vấn JavaScript mà chúng tôi vừa gợi ý trên đây nhé.