# Trick độc, code lạ =))
# Nhân / chia 2
8 >> 1; // lùi 1 bit == chia 2
1 << 2; // tiến 2 bit == nhân 4
# Math.floor
Loại bỏ phần thập phân
Math.floor(321.92) /// cách bình thường
~~321.92; // chạy nhanh hơn =)) do thao tác trực tiếp trên bit
~~(Math.random() * 100) /// case thực tế, random số từ 0 -> 100
# Ép kiểu
Ép kiểu từ string sang số, +
trước string
+'323' /// 323
+'123sdfdsf' /// NaN
Ép sang boolean -> !!
tất cả các giá trị Falsy đều về false
!!undefined; // false
!!''; // false
!!NaN; // false
# Điều kiện
/// thông thường =))
if ( dep_trai ) {
gai_theo();
}
/// thông thái =)))
dep_trai && gai_theo();
# Kiểm tra Object rỗng
!Object.keys({}).length; // true
# Array tricks
# Gộp mảng
arr1.concat(arr2); /// cách bình thường
arr1.push.apply(arr1, arr2); /// nhanh hơn vì thèng này sẽ thay đổi arr1
# Tìm kiếm phần tử
Nếu chỉ cần 1 phần tử, hãy sử dụng Array.find
thay vì filter
vì filter sẽ quét hết mảng.
# Reduce sinh ra để làm gì?
const avengers = [
{ name: 'ironman', age: 27 },
{ name: 'hulk', age: 12 },
{ name: 'captain_america', age: 18 },
{ name: 'thor', age: 22 },
];
/// lấy tên các bạn trên 18 theo cách thông thường
const result = avengers.filter(({ age }) => age >= 18) .map(({ name }) => name);
/// cách thông thái
const result = avengers.reduce((avenger, { age, name }) => {
return (age >= 18) ? [...avenger, name] : avenger;
}, []);
# Thêm custom function
Array.prototype.sum = function() {
return this.reduce((total, amount) => total + amount);
};
[ 11, 22 , 44 ].sum(); // 77