Một số tip hữu ích javascript
Bài đăng này đã không được cập nhật trong 7 năm
- Chuyển đổi kiểu dữ liệu sang boolean.
Đôi lúc ta cần kiểm tra một biến có tồn tại hoặc giá trị của nó có hợp lệ hay không. Để làm như vậy ta có thể dùng toán tử !!
. Nó sẽ trả mọi kiểu dữ liệu về dạng boolean.
Nó trả về false nếu những giá trị truyền vào là "", null, undefined, 0, NaN. Ngược lại nó sẽ trả về true. Ví dụ:
var x = "123"
console.log(!!x) // true
var y = null
console.log( !!y ) // false
- Chuyển đổi kiểu dữ liệu sang number sử dụng toán tử + .
Dùng để chuyển chuỗi những con số sang số. Ngược lại nếu trong chuỗi có cả chữ thì nó sẽ trả về NaN. Với DateTime nó sẽ trả về số dạng Timestamp ví dụ:
var x = "123"
console.log(+x); // 123
var y = "Abc123"
console.log(+y) //NaN
var z = new Date()
console.log(+z) // 1495679563806
- Sử dụng AND và OR cho các điều kiện.
- ví dụ dùng and để thay cho câu lệnh if: thay vì viết:
if(foo == 1){
doSomething();
}
ta có thể dùng :
(foo ==1) && doSomething();
- Dùng OR để set giá trị default cho 1 variable:
function doSomething(arg1){
arg1 = arg1 || 10; // arg1 will have 10 as a default value if it’s not already set
}
- Sử dụng Map để tạo loop qua các item của array:
ví dụ
var squares = [1,2,3,4].map(function (val) {
return val * val; // [1,4,9,16]
});
- Sử dụng === thay thế ==.
Hãy xem sự khác nhau giữa các ví dụ sau:
[10] === 10 // is false
[10] == 10 // is true
'10' == 10 // is true
'10' === 10 // is false
[] == 0 // is true
[] === 0 // is false
'' == false // is true but true == "a" is false
'' === false // is false
Bởi vì khi dùng == sẽ tự động convert type nếu cần nên [10] đã bị convert thành 10. Còn khi dùng === ta có thể so sánh cả giá trị lẫn kiểu của dữ liệu
-
undefined, null, 0, false, NaN, '' (empty string) đều có tính chất giá trị false.
-
Lấy giá tri random trong 1 mảng:
var items = [12, 548 , 'a' , 2 , 5478 , 'foo' , 8852, , 'Doe' , 2145 , 119];
var randomItem = items[Math.floor(Math.random() * items.length)];
- Lấy số random trong một khoảng xác định:
var x = Math.floor(Math.random() * (max - min + 1)) + min;
- Đảo thứ tự của các phàn tử trong mảng.
Ta có thể dùng hàm Math.random để xáo trộn các phần tử trong 1 mảng ví dụ:
var list = [1, 2, 3];
console.log(list.sort(function() {
return Math.random() - 0.5
})); // [2,1,3]
- gộp các mảng.:
Ta có thể dùng hàm concat của class Array để gộp 2 hay nhiều mảng. ví dụ:
arr1 = [1,2,3]
arr2 = [4,5,6]
arr = arr1.concat(arr2) // [1,2,3,4,5,6]
Tuy nhiên hàm này chỉ thích hợp với việc gộp các mảng nhỏ vì nó tạo ra một mảng mới hoàn toán. đối với các mảng lớn ta có thể dùng hàm Array.push Array.push.apply:
arr1.push.apply(arr2)
Hàm này gộp trực tiếp mảng 2 vào mảng 1 từ đó ko cần sử dụng đến bộ nhớ cho mảng mới như concat nên sẽ cải thiện tốc độ.
- xóa dữ liệu của một array.
Ta có thể dùng các cách:
arr = [1,2,3,4,5]
arr.splice(0, arr.length);
or
arr.length = 0.
mình thì thích dùng cách 2 hơn 12. Không nên dùng delete để xóa dữ liệu trong một array. Bởi vì delete sẽ replace item bằng undefined . Để xóa dữ liệu ta có thể dùng hàm splice
ví dụ:
var arr = [1,2,3,4,5]
arr.length; // return 5
delete arr[2];
arr.length; // return 5
console.log(arr) // [1,2,undefined,4,5]
Sử dụng splice để thay thế
var arr = [1,2,3,4,5]
arr.length; // return 5
arr.splice(2,1) ;
arr.length; // return 4
console.log(arr) //return [1,2,4,5]
- Truncate array bằng cách gán length của array đó
vi dụ muốn cắt đoạn 1 array ta có thể làm như sau:
arr = [1,2,3,4,5,6,7,8,9]
arr.length = 5
console.log(arr) // return [1, 2, 3, 4, 5]
có thể nhìn thấy array trên đã bị cắt thành một array mới có length = length ta mới set.
Nếu array có độ dài ngắn hơn độ dài ta muốn set thì sao. Thì lúc đó các phần tử mới thêm của array đều là undefined.
arr = [1,2,3];
arr.length = 5;
console.log(arr) // return [1,2,3,undefined, undefined]
- Lấy phần tử cuối trong mảng Array.prototype.slice(begin, end) có thể cắt mảng khi bạn đặt tham số begin và end. Nhưng nếu bạn không nhập tham số end, hàm này sẽ tự động đặt giá trị lớn nhất cho mảng. Tôi nghĩ rằng ít người biết được hàm này có thể chấp nhận giá trị âm, và nếu bạn đặt tham số begin là một số âm thì bạn sẽ lấy ra các phần tử cuối cùng từ mảng:
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]
- Tránh việc sử dụng for-in trong vòng lặp array
không tốt khi dùng
var sum = 0;
for (var i in arrayNumbers) {
sum += arrayNumbers[i];
}
Tốt hơn nên dùng như sau
var sum = 0;
for (var i = 0, len = arrayNumbers.length; i < len; i++) {
sum += arrayNumbers[i];
}
- Cache array.length trong vòng lặp
Mẹo này đơn giản nhưng có tác dụng lớn tới hiệu suất nếu bạn sử dụng cho một mảng lớn.
for (var i = 0; i < array.length; i++) {
console.log(array[i]);
}
Nếu làm việc với các mảng nhỏ thi không sao nhưng với các hàm lớn gây ra một chút chậm chễ do nó tính toán lại kích cỡ của mảng sau mỗi lần lặp. Để tránh điều này ta cache array. length trong 1 biến và dùng nó .
var length = array.length;
for (var i = 0; i < length; i++) {
console.log(array[i]);
}
Để làm nó trông gọn hơn, chỉ việc viết lại như sau:
for (var i = 0, length = array.length; i < length; i++) {
console.log(array[i]);
}
All rights reserved