Trong bài viết này mình sẽ chia sẻ 12 Mẹo sử dụng Javascript cực kỳ hữu ích. Những mẹo này sẽ giúp bạn code Javascript ngắn hơn, tối ưu hóa hơn.
12 Mẹo sử dụng Javascript
Hãy bắt đầu nào!
Mẹo #1: Chuyển đổi sang Boolean bằng toán tử !!
Đôi khi chúng ta cần kiểm tra xem một số biến có tồn tại hay là giá trị của nó có hợp lệ hay không, để có thể xem nó là giá trị thực (true value).
Để thực hiện loại xác nhận này, bạn có thể sử dụng toán tử !! (Toán tử phủ định kép) đơn giản như là: !!variable
Nó sẽ tự động chuyển đổi bất kỳ loại dữ liệu nào thành boolean:
-
Biến này sẽ trả về false chỉ khi nó có một số giá trị sau: 0, null, "", undefined hoặc NaN
-
Nếu không nó sẽ trả lại true.
Để hiểu nó trong thực tế, hãy xem ví dụ đơn giản này:
function Account(cash) {
this.cash = cash;
this.hasMoney = !!cash;
}
var account = new Account(100.50);
console.log(account.cash); // 100.50
console.log(account.hasMoney); // true
var emptyAccount = new Account(0);
console.log(emptyAccount.cash); // 0
console.log(emptyAccount.hasMoney); // false
Trong trường hợp này, nếu giá trị account.cash lớn hơn 0, acount.hasMoney sẽ true.
Mẹo #2: Chuyển đổi thành number sử dụng toán tử +
Mẹo này rất là tuyệt vời! Và nó rất đơn giản để thực hiện, nhưng nó chỉ hoạt động với số ở dạng chuỗi (vd: "10", "20" ....), nếu không nó sẽ trả về NaN (Không phải là số).
Hãy xem ví dụ này:
function toNumber(strNumber) {
return +strNumber;
}
console.log(toNumber("1234")); // 1234
console.log(toNumber("ACB")); // NaN
// Toán tử + cũng hoạt động với định dạng Date
// Trong trường hợp này nó sẽ trả về timestamp
console.log(+new Date()) // 1461288164385
Mẹo #3: Sử dụng toán tử &&
Nếu bạn nhìn thấy một đoạn code tương tự:
if (conected) {
login();
}
Bạn có thể rút ngắn nó bằng cách sử dụng kết hợp một biến (sẽ được xác minh) và một hàm sử dụng toán tử && (AND).
Ví dụ: Đoạn code trên có thể viết thành 1 dòng:
conected && login();
Bạn có thể làm tương tự để kiểm tra xem một số thuộc tính hoặc function có tồn tại trong đối tượng hay không.
Tương tự như mã dưới đây:
user && user.login();
Mẹo #4: Thiết lập giá trị mặc định sử dụng toán tử ||
Hiện tại, trong ES6 có tính năng đối số mặc định.
Để mô phỏng tính năng này trong các trình duyệt cũ, bạn có thể sử dụng || (Toán tử OR) bằng cách đặt giá trị mặc định làm tham số thứ hai.
Nếu tham số đầu tiên trả về false, tham số thứ hai sẽ được sử dụng làm giá trị mặc định.
Hãy xem ví dụ này:
function User(name, age) {
this.name = name || "NIIT";
this.age = age || 27;
}
var user1 = new User();
console.log(user1.name); // NIIT
console.log(user1.age); // 27
var user2 = new User("Doanh", 25);
console.log(user2.name); // Doanh
console.log(user2.age); // 25
Như bạn thấy đấy, ở user1, chúng ta tạo đối tượng nhưng không truyền đối số. Do đó đối tượng này sẽ lấy giá trị mặc định.
Mẹo #5: Nhớ tạm array.length trong vòng lặp
Mẹo này rất đơn giản và gây ra tác động rất lớn đến hiệu suất khi xử lý các mảng lớn trong một vòng lặp.
Về cơ bản, hầu hết mọi người đều viết điều này đồng bộ để lặp lại một mảng:
for(var i = 0; i < array.length; i++) {
console.log(array[i]);
}
Nếu bạn làm việc với các mảng nhỏ - nó cũng ổn, nhưng nếu bạn xử lý các mảng lớn, code này sẽ tính toán lại kích thước của mảng trong mỗi lần lặp của vòng lặp này và nó làm giảm hiệu suất.
Để tránh điều này, bạn có thể nhớ tạm array.length trong một biến để sử dụng nó thay vì gọi lại array.length mỗi lần lặp:
var length = array.length;
for(var i = 0; i < length; i++) {
console.log(array[i]);
}
Để làm gọn gàng hơn, chỉ cần viết code như thế này:
for(var i = 0, length = array.length; i < length; i++) {
console.log(array[i]);
}
Mẹo #6: Detect thuộc tính trong đối tượng
Thủ thuật này rất hữu ích khi bạn cần kiểm tra nếu một số thuộc tính có tồn tại hay không để tránh chạy các function hoặc thuộc tính không xác định.
Nếu bạn đang dự định viết code cross-platform, có lẽ bạn cũng sẽ sử dụng kỹ thuật này.
Ví dụ:
Hãy để tưởng tượng rằng bạn cần viết code tương thích với Internet Explorer 6 cũ và bạn muốn sử dụng document.querySelector(), để lấy một số phần tử theo id của chúng.
Tuy nhiên, trong trình duyệt này, chức năng này không tồn tại, vì vậy để kiểm tra sự tồn tại của chức năng này, bạn có thể sử dụng toán tử in.
Hãy xem ví dụ này:
if ('querySelector' in document) {
document.querySelector("#id");
} else {
document.getElementById("id");
}
Trong trường hợp này, nếu không có hàm querySelector trong đối tượng document, chúng ta có thể sử dụng hàm khác để dự phòng như: document.getElementById()
Mẹo #7: Lấy item cuối cùng của một mảng
Array.prototype.slice(begin, end) có khả năng cắt các mảng khi bạn đặt các đối số bắt đầu và kết thúc.
Nhưng nếu bạn không đặt đối số end, hàm này sẽ tự động cắt từ begin đến cuối mảng.
Mình nghĩ rằng ít người biết hàm này có thể chấp nhận các giá trị âm và nếu bạn đặt số âm làm đối số begin, bạn sẽ nhận được các phần tử cuối cùng từ mảng:
Ví dụ:
var array = [1,2,3,4,5,6];
console.log(array.slice(-1)); // [6]
console.log(array.slice(-2)); // [5,6]
console.log(array.slice(-3)); // [4,5,6]
Mẹo #8: Cắt ngắn mảng
Kỹ thuật cắt ngắn mảng trong Javascript này có thể khóa kích thước mảng, cách này rất hữu ích để xóa một số phần tử của mảng dựa trên số lượng phần tử bạn muốn đặt.
Ví dụ: Nếu bạn có một mảng có 10 phần tử, nhưng bạn chỉ muốn để lại năm phần tử đầu tiên, bạn có thể cắt bớt mảng đó, làm cho nó nhỏ hơn bằng cách đặt lại độ dài của mảng cho nó: array.length = 5
Hãy xem ví dụ:
var array = [1,2,3,4,5,6];
console.log(array.length); // 6
array.length = 3;
console.log(array.length); // 3
console.log(array); // [1,2,3]
Mẹo #9: Thay thế tất cả (ReplaceAll)
Hàm String.replace() cho phép sử dụng String và Biểu thức chính quy (Regex) để thay thế các chuỗi, thực chất hàm này chỉ thay thế lần xuất hiện đầu tiên.
Nhưng bạn vẫn có thể sử dụng replace() mô phỏng hàm replaceAll() bằng cách sử dụng /g ở cuối biểu thức chính quy:
var string = "Xinh lung linh";
console.log(string.replace(/nh/, "ng")); // "Xing lung linh"
console.log(string.replace(/nh/g, "ng")); // "Xing lung ling"
Mẹo #10: Hợp nhất Mảng
Nếu bạn cần hợp nhất hai mảng, bạn có thể sử dụng hàm Array.concat() như thế này:
var array1 = [1,2,3];
var array2 = [4,5,6];
console.log(array1.concat(array2)); // [1,2,3,4,5,6];
Tuy nhiên, hàm này không phù hợp nhất để hợp nhất các mảng lớn vì nó sẽ tiêu tốn rất nhiều bộ nhớ vì nó sẽ tạo một mảng mới.
Trong trường hợp này, bạn có thể sử dụng Array.push.apply(Array1, Array2)
Thay vì tạo ra một mảng mới - nó sẽ hợp nhất mảng thứ hai vào mảng đầu tiên (làm giảm việc sử dụng bộ nhớ):
var array1 = [1,2,3];
var array2 = [4,5,6];
console.log(array1.push.apply(array1, array2)); // [1,2,3,4,5,6];
Mẹo #11: Chuyển đổi NodeList thành Arrays
Nếu bạn chạy hàm document.querySelectorAll('p'), nó có thể sẽ trả về một mảng các phần tử DOM, đối tượng NodeList.
Nhưng đối tượng này không sử dụng được các hàm hữu ích cho mảng, như: sort(), less(), map(), filter().
Để kích hoạt các hàm này và nhiều hàm khác, bạn cần chuyển đổi NodeList thành Arrays.
Để chạy kỹ thuật này, chỉ cần sử dụng: [].slice.call(elements)
var elements = document.querySelectorAll("p"); // NodeList
var arrayElements = [].slice.call(elements); // Bây giờ NodeList là một array
var arrayElements = Array.from(elements); // Một cách khác chuyển đổi NodeList thành Array
Mẹo #12: Xáo trộn phần tử của mảng
Để xáo trộn các phần tử mảng mà không sử dụng bất kỳ thư viện bên ngoài nào như Lodash, chỉ cần sử dụng mẹo này:
var list = [1,2,3];
console.log(list.sort(function() { Math.random() - 0.5 })); // [2,1,3]
Chúc mừng bạn đã biết thêm nhiều mẹo sử dụng Javascript
Trên đây mình đã giúp bạn biết được một số Mẹo sử dụng Javascript hữu ích, phần lớn được sử dụng để tối ưu code JavaScript và một số thủ thuật này được sử dụng nhiều trong các framework phổ biến như Lodash, Underscore.js, String.js, ....
Còn bạn nào muốn đi sâu hơn nữa thì có thể bắt đầu với Khóa học Lập trình Fullstack tại NIIT - ICT Hà Nội:
Trong Khóa học này các bạn cũng sẽ được hướng dẫn kỹ càng và hiểu rõ bản chất của Javascript để từ đó vận dụng trong lập trình.
Mình hy vọng bạn thích bài viết này và nếu bạn biết các mẹo JS hữu ích khác của Javascript, vui lòng để lại bình luận bên dưới để chia sẻ cho mọi người nhé.
---
HỌC VIỆN ĐÀO TẠO CNTT NIIT - ICT HÀ NỘI
Dạy học Lập trình chất lượng cao (Since 2002). Học làm Lập trình viên. Hành động ngay!
Đc: Tầng 3, 25T2, N05, Nguyễn Thị Thập, Cầu Giấy, Hà Nội
SĐT: 02435574074 - 0914939543 - 0353655150
Email: hello@niithanoi.edu.vn
Fanpage: https://facebook.com/NIIT.ICT/
#niit #niithanoi #niiticthanoi #hoclaptrinh #khoahoclaptrinh #hoclaptrinhjava #hoclaptrinhphp #python #java #php