## 1. ES6+ Features
### a. Arrow Functions
```javascript
const add = (a, b) => a + b;
console.log(add(2, 3)); // 5
```
### b. Destructuring
```javascript
const person = { name: 'Nam', age: 25 };
const { name, age } = person;
console.log(name); // Nam
```
### c. Spread Operator
```javascript
const arr1 = [1, 2, 3];
const arr2 = [...arr1, 4, 5];
console.log(arr2); // [1, 2, 3, 4, 5]
```
### d. Rest Operator
```javascript
const sum = (...numbers) => numbers.reduce((acc, curr) => acc + curr, 0);
console.log(sum(1, 2, 3, 4)); // 10
```
## 2. Hàm built-in
```javascript
# Nhân đôi các số
const numbers = [1, 2, 3, 4];
const doubled = numbers.map(num => num * 2);
console.log(doubled); // [2, 4, 6, 8]
```
```javascript
const names = ['An', 'Bình', 'Chi'];
const greetings = names.map(name => `Hello, ${name}`);
console.log(greetings);
// ["Hello, An", "Hello, Bình", "Hello, Chi"]
```
```javascript
# Lấy tên từ danh sách đối tượng
const users = [
{ id: 1, name: 'Nam' },
{ id: 2, name: 'Lan' }
];
const names = users.map(user => user.name);
console.log(names); // ['Nam', 'Lan']
```
```javascript
# Lọc người có tuổi >= 18
const people = [
{ name: 'An', age: 17 },
{ name: 'Bình', age: 20 },
{ name: 'Chi', age: 16 },
];
const adults = people.filter(person => person.age >= 18);
console.log(adults);
```
### Truthy and Falsy
Falsy : Giá trị phổ biến: false, 0, "", null, undefined , NaN
```javascript
// 1. false
if (!false) {
console.log("1. false là falsy");
}
// 2. 0
if (!0) {
console.log("2. 0 là falsy");
}
// 5. "" (Chuỗi rỗng)
if (!"") {
console.log("5. Chuỗi rỗng là falsy");
}
// 6. null
if (!null) {
console.log("6. null là falsy");
}
// 7. undefined
if (!undefined) {
console.log("7. undefined là falsy");
}
// (8.) NaN – thường cũng được liệt kê, nhưng nếu bạn tính đủ 7 thì NaN là cái thay thế -0 hoặc 0n
if (!NaN) {
console.log("8. NaN là falsy");
}
```
### Toán tử logic
```javascript
&& (AND) – Trả về giá trị thứ hai nếu vế trái là truthy
const isLoggedIn = true;
const message = isLoggedIn && "Chào mừng bạn!";
console.log(message); // "Chào mừng bạn!"
const isOnline = false;
console.log(isOnline && "Bạn đang online"); // false
```
```javascript
|| (OR) – Trả về giá trị đầu tiên truthy
const username = "";
const nameToShow = username || "Khách";
console.log(nameToShow); // "Khách"
const age = 0;
const ageToShow = age || 18;
console.log(ageToShow); // 18 (vì 0 là falsy)
```
```javascript
# Toán tử Ba ngôi ? : – Thay thế cho if...else
điều_kiện ? giá_trị_nếu_đúng : giá_trị_nếu_sai;
const isDarkMode = true;
const theme = isDarkMode ? "Giao diện tối" : "Giao diện sáng";
console.log(theme); // "Giao diện tối"
```