0
0
Posts
Admin Team
Admin Teamtechmely

20 Thủ Thuật JavaScript Nâng Cao Dành Cho Lập Trình Viên Muốn Nâng Cao Kỹ Năng

Đăng vào 1 tuần trước

• 6 phút đọc

Chủ đề:

development

20 Thủ Thuật JavaScript Nâng Cao Dành Cho Lập Trình Viên Muốn Nâng Cao Kỹ Năng

JavaScript là một ngôn ngữ lập trình mạnh mẽ và phổ biến trong phát triển web hiện đại. Bài viết này tổng hợp 20 thủ thuật JavaScript nâng cao dành cho các lập trình viên với nhiều cấp độ khác nhau, từ những người mới bắt đầu cho đến những lập trình viên dày dạn kinh nghiệm. Những mẹo và kỹ thuật này không chỉ giúp bạn viết mã rõ ràng, dễ hiểu mà còn tối ưu hóa hiệu suất của ứng dụng. Hãy cùng khám phá!

1. Phép Gán Phân Rã (Destructuring Assignment)

Phép gán phân rã cho phép bạn trích xuất giá trị từ mảng hoặc thuộc tính từ đối tượng một cách dễ dàng. Điều này giúp mã nguồn trở nên rõ ràng hơn.

javascript Copy
const [first, second] = [10, 20];
const { name, age } = { name: 'Alice', age: 30 };

2. Tham Số Mặc Định (Default Parameters)

Tham số mặc định giúp bạn thiết lập giá trị mặc định cho các tham số của hàm, làm cho hàm linh hoạt và dễ sử dụng hơn.

javascript Copy
function greet(name = 'Khách') {
  console.log(`Xin chào, ${name}!`);
}
greet(); // Output: Xin chào, Khách!

3. Template Literals

Template literals cho phép nhúng biểu thức vào chuỗi, giúp việc tổng hợp các chuỗi dễ dàng hơn.

javascript Copy
const name = 'Bob';
console.log(`Xin chào, ${name}!`);

4. Hàm Mũi Tên (Arrow Functions)

Hàm mũi tên cung cấp cú pháp ngắn gọn và tự động ràng buộc giá trị this với ngữ cảnh xung quanh.

javascript Copy
const add = (a, b) => a + b;

5. Toán Tử Spread và Rest

Toán tử spread (...) mở rộng một iterable thành các phần tử riêng lẻ, trong khi toán tử rest thu thập nhiều phần tử thành một mảng.

javascript Copy
const numbers = [1, 2, 3];
const newNumbers = [...numbers, 4, 5];

function sum(...args) {
  return args.reduce((acc, val) => acc + val, 0);
}

6. Promises và Async/Await

Promises và cú pháp async/await làm việc với mã bất đồng bộ trở nên dễ dàng hơn và dễ hiểu hơn.

javascript Copy
async function fetchData() {
  try {
    const response = await fetch('https://api.example.com/data');
    const data = await response.json();
    console.log(data);
  } catch (error) {
    console.error('Lỗi khi lấy dữ liệu:', error);
  }
}

7. Optional Chaining (Chuỗi Tùy Chọn)

Optional chaining (?.) giúp bạn truy cập an toàn vào các thuộc tính lồng nhau mà không cần kiểm tra từng cấp một cách tường minh.

javascript Copy
const user = { name: 'Alice', address: { city: 'Wonderland' } };
const city = user?.address?.city;

8. Nullish Coalescing (Toán Tử Hợp Nhất Null)

Toán tử nullish coalescing (??) cung cấp giá trị mặc định khi bạn làm việc với null hoặc undefined.

javascript Copy
const value = null ?? 'mặc định';
console.log(value); // Output: mặc định

9. Import Động (Dynamic Imports)

Import động cho phép bạn tải các mô-đun cần thiết, giúp cải thiện hiệu suất bằng cách phân tách mã nguồn.

javascript Copy
import('./module.js').then(module => {
  module.doSomething();
});

10. Proxy Objects

Proxy cho phép bạn tạo các đối tượng với hành vi tùy chỉnh cho các thao tác cơ bản như tra cứu thuộc tính, gán giá trị.

javascript Copy
const handler = {
  get: (obj, prop) => {
    if (prop in obj) {
      return obj[prop];
    } else {
      return 'Tài sản không tìm thấy';
    }
  }
};

const proxy = new Proxy({ name: 'Alice' }, handler);
console.log(proxy.name); // Output: Alice
console.log(proxy.age);  // Output: Tài sản không tìm thấy

11. Memoization

Memoization là kỹ thuật tối ưu hóa cho các hàm tốn kém bằng cách lưu trữ kết quả đã tính toán.

javascript Copy
function memoize(fn) {
  const cache = {};
  return function (...args) {
    const key = JSON.stringify(args);
    if (cache[key]) {
      return cache[key];
    } else {
      const result = fn(...args);
      cache[key] = result;
      return result;
    }
  };
}

12. Currying

Currying là kỹ thuật lập trình hàm, chuyển đổi một hàm với nhiều tham số thành chuỗi các hàm đơn.

javascript Copy
function curry(fn) {
  return function curried(...args) {
    if (args.length >= fn.length) {
      return fn.apply(this, args);
    } else {
      return function (...args2) {
        return curried.apply(this, args.concat(args2));
      };
    }
  };
}

13. Hàm Cấp Cao (Higher-Order Functions)

Hàm cấp cao nhận các hàm khác làm tham số hoặc trả về các hàm như là kết quả.

javascript Copy
function higherOrder(fn) {
  return function (...args) {
    console.log('Trước khi gọi hàm');
    const result = fn(...args);
    console.log('Sau khi gọi hàm');
    return result;
  };
}

14. Ủy Quyền Sự Kiện (Event Delegation)

Ủy quyền sự kiện là kỹ thuật xử lý sự kiện hiệu quả bằng cách thêm một trình nghe sự kiện vào phần tử cha.

javascript Copy
document.querySelector('#parent').addEventListener('click', function (event) {
  if (event.target.tagName === 'BUTTON') {
    console.log('Nút đã được nhấn:', event.target.textContent);
  }
});

15. Debouncing và Throttling

Cả hai kỹ thuật này rất hữu ích trong việc tối ưu hóa hiệu suất cho các tình huống như sự kiện cuộn (scroll) hoặc thay đổi đầu vào (input).

javascript Copy
function debounce(fn, delay) {
  let timeout;
  return function (...args) {
    clearTimeout(timeout);
    timeout = setTimeout(() => fn(...args), delay);
  };
}

function throttle(fn, limit) {
  let inThrottle;
  return function (...args) {
    if (!inThrottle) {
      fn(...args);
      inThrottle = true;
      setTimeout(() => (inThrottle = false), limit);
    }
  };
}

16. Custom Hooks trong React

Custom hooks trong React cho phép bạn tái sử dụng logic có trạng thái giữa các component.

javascript Copy
function useLocalStorage(key, initialValue) {
  const [storedValue, setStoredValue] = React.useState(() => {
    const item = window.localStorage.getItem(key);
    return item ? JSON.parse(item) : initialValue;
  });

  const setValue = value => {
    setStoredValue(value);
    window.localStorage.setItem(key, JSON.stringify(value));
  };

  return [storedValue, setValue];
}

17. Web Workers

Web Workers cho phép chạy các script trong luồng nền, giúp giao diện người dùng luôn mượt mà.

javascript Copy
const worker = new Worker('worker.js');
worker.postMessage('Chào, Worker!');
worker.onmessage = function (event) {
  console.log('Tin nhắn từ worker:', event.data);
};

18. Service Workers

Service Workers hoạt động như proxy mạng, cho phép bạn tạo trải nghiệm ngoại tuyến và cải thiện hiệu suất.

javascript Copy
if ('serviceWorker' in navigator) {
  navigator.serviceWorker.register('/service-worker.js').then(function (registration) {
    console.log('Service Worker đã được đăng ký với phạm vi:', registration.scope);
  });
}

19. Intersection Observer API

Intersection Observer API giúp bạn quan sát sự giao nhau giữa phần tử mục tiêu và vùng nhìn tài liệu.

javascript Copy
const observer = new IntersectionObserver(entries => {
  entries.forEach(entry => {
    if (entry.isIntersecting) {
      console.log('Phần tử đang hiển thị:', entry.target);
    }
  });
});

observer.observe(document.querySelector('#target'));

20. Các Phần Tử Tùy Chỉnh và Shadow DOM

Phần tử tùy chỉnh và Shadow DOM cho phép bạn tạo các component tái sử dụng với kiểu dáng và hành vi riêng biệt.

javascript Copy
class MyElement extends HTMLElement {
  constructor() {
    super();
    const shadow = this.attachShadow({ mode: 'open' });
    shadow.innerHTML = `<style>:host { color: blue; }</style><p>Xin chào, Thế Giới!</p>`;
  }
}

customElements.define('my-element', MyElement);

Thông qua việc áp dụng những thủ thuật này, bạn sẽ nâng cao được kỹ năng lập trình của mình và có thể viết mã JavaScript hiệu quả hơn. Chúc bạn thành công trong hành trình lập trình!

Gợi ý câu hỏi phỏng vấn
Không có dữ liệu

Không có dữ liệu

Bài viết được đề xuất
Bài viết cùng tác giả

Bình luận

Chưa có bình luận nào

Chưa có bình luận nào