Hướng dẫn JS

JS TRANG CHỦ Giới thiệu JS JS Đến đâu Đầu ra JS Tuyên bố JS Cú pháp JS Bình luận JS Biến JS JS Hãy JS Const Toán tử JS Số học JS Chuyển nhượng JS Các loại dữ liệu JS Các hàm JS Đối tượng JS Sự kiện JS Chuỗi JS Phương thức chuỗi JS Tìm kiếm chuỗi JS Mẫu chuỗi JS Số JS Phương thức số JS Mảng JS Phương thức mảng JS Sắp xếp mảng JS Lặp lại mảng JS JS Array Const JS ngày Định dạng ngày JS Ngày lấy phương thức JS Phương pháp đặt ngày JS Toán JS JS ngẫu nhiên JS Booleans So sánh JS Điều kiện JS Chuyển đổi JS JS Loop cho JS Loop For In JS Loop For Of JS lặp trong khi JS Break JS lặp lại Bộ JS Bản đồ JS JS Typeof Chuyển đổi loại JS JS Bitwise JS RegExp Lỗi JS Phạm vi JS JS Hoists Chế độ nghiêm ngặt JS JS từ khóa này Hàm mũi tên JS Lớp JS JS JSON Gỡ lỗi JS Hướng dẫn kiểu JS Các phương pháp hay nhất về JS JS sai lầm Hiệu suất JS JS dành riêng từ

Phiên bản JS

Phiên bản JS JS 2009 (ES5) JS 2015 (ES6) JS 2016 JS 2017 JS 2018 JS IE / Edge Lịch sử JS

Đối tượng JS

Định nghĩa đối tượng Thuộc tính đối tượng Phương thức đối tượng Hiển thị đối tượng Người truy cập đối tượng Trình tạo đối tượng Nguyên mẫu đối tượng Đối tượng lặp lại Bộ đối tượng Bản đồ đối tượng Tham chiếu đối tượng

Các hàm JS

Định nghĩa hàm Tham số chức năng Lời mời hàm Gọi hàm Áp dụng chức năng Chức năng đóng cửa

Lớp JS

Giới thiệu Lớp học Kế thừa giai cấp Lớp tĩnh

JS Async

Gọi lại JS JS không đồng bộ JS hứa JS Async / Await

JS HTML DOM

Giới thiệu DOM Phương thức DOM Tài liệu DOM Phần tử DOM DOM HTML Các biểu mẫu DOM DOM CSS Hoạt ảnh DOM Sự kiện DOM Trình xử lý sự kiện DOM Điều hướng DOM Nút DOM Bộ sưu tập DOM Danh sách nút DOM

BOM trình duyệt JS

Cửa sổ JS Màn hình JS Vị trí JS Lịch sử JS JS Navigator JS Popup Alert Thời gian JS JS Cookies

API web JS

Giới thiệu API Web API biểu mẫu web API lịch sử web API lưu trữ web API công nhân web API tìm nạp web API vị trí địa lý web

JS AJAX

Giới thiệu về AJAX AJAX XMLHttp Yêu cầu AJAX Phản hồi AJAX Tệp XML AJAX AJAX PHP AJAX ASP Cơ sở dữ liệu AJAX Ứng dụng AJAX Ví dụ về AJAX

JS JSON

Giới thiệu JSON Cú pháp JSON JSON so với XML Các loại dữ liệu JSON Phân tích cú pháp JSON JSON Stringify Đối tượng JSON Mảng JSON Máy chủ JSON JSON PHP HTML JSON JSON JSONP

JS so với jQuery

Bộ chọn jQuery jQuery HTML jQuery CSS jQuery DOM

Đồ họa JS

Đồ họa JS JS Canvas JS Plotly JS Chart.js JS Google Chart JS D3.js

Ví dụ về JS

Ví dụ về JS JS HTML DOM Đầu vào HTML JS Đối tượng HTML JS Sự kiện HTML JS Trình duyệt JS Trình chỉnh sửa JS Bài tập JS JS Quiz Chứng chỉ JS

Tham khảo JS

Đối tượng JavaScript Đối tượng DOM HTML


Các phương pháp hay nhất về JavaScript


Tránh các biến toàn cục, tránh new, tránh ==, tránheval()


Tránh các biến toàn cục

Giảm thiểu việc sử dụng các biến toàn cục.

Điều này bao gồm tất cả các kiểu dữ liệu, đối tượng và chức năng.

Các biến và hàm toàn cục có thể bị ghi đè bởi các tập lệnh khác.

Thay vào đó, hãy sử dụng các biến cục bộ và tìm hiểu cách sử dụng các bao đóng .


Luôn khai báo các biến cục bộ

Tất cả các biến được sử dụng trong một hàm nên được khai báo là biến cục bộ.

Các biến cục bộ phải được khai báo với var từ khóa hoặc lettừ khóa, hoặc consttừ khóa, nếu không chúng sẽ trở thành biến toàn cục.

Chế độ nghiêm ngặt không cho phép các biến không được khai báo.


Tuyên bố ở trên cùng

Một phương pháp viết mã tốt là đặt tất cả các khai báo ở đầu mỗi tập lệnh hoặc hàm.

Điều này sẽ:

  • Cung cấp mã sạch hơn
  • Cung cấp một nơi duy nhất để tìm kiếm các biến cục bộ
  • Giúp tránh các biến toàn cục không mong muốn (ngụ ý) dễ dàng hơn
  • Giảm khả năng khai báo lại không mong muốn
// Declare at the beginning
let firstName, lastName, price, discount, fullPrice;

// Use later
firstName = "John";
lastName = "Doe";

price = 19.90;
discount = 0.10;

fullPrice = price - discount;

Điều này cũng áp dụng cho các biến vòng lặp:

for (let i = 0; i < 5; i++) {


Khởi tạo các biến

Đó là một thực hành mã hóa tốt để khởi tạo các biến khi bạn khai báo chúng.

Điều này sẽ:

  • Cung cấp mã sạch hơn
  • Cung cấp một nơi duy nhất để khởi tạo các biến
  • Tránh các giá trị không xác định
// Declare and initiate at the beginning
let firstName = "",
let lastName = "",
let price = 0,
let discount = 0,
let fullPrice = 0,
const myArray = [],
const myObject = {};

Khởi tạo các biến cung cấp ý tưởng về mục đích sử dụng (và kiểu dữ liệu dự định).


Khai báo các đối tượng với const

Khai báo các đối tượng với const sẽ ngăn chặn bất kỳ sự thay đổi kiểu ngẫu nhiên nào:

Thí dụ

let car = {type:"Fiat", model:"500", color:"white"};
car = "Fiat";      // Changes object to string

const car = {type:"Fiat", model:"500", color:"white"};
car = "Fiat";      // Not possible

Khai báo Mảng với const

Khai báo mảng với const sẽ ngăn chặn bất kỳ sự thay đổi kiểu ngẫu nhiên nào:

Thí dụ

let cars = ["Saab", "Volvo", "BMW"];
cars = 3;    // Changes array to number

const cars = ["Saab", "Volvo", "BMW"];
cars = 3;    // Not possible

Không sử dụng đối tượng mới ()

  • Sử dụng ""thay vìnew String()
  • Sử dụng 0thay vìnew Number()
  • Sử dụng falsethay vìnew Boolean()
  • Sử dụng {}thay vìnew Object()
  • Sử dụng []thay vìnew Array()
  • Sử dụng /()/thay vìnew RegExp()
  • Sử dụng function (){}thay vìnew Function()

Thí dụ

let x1 = "";             // new primitive string
let x2 = 0;              // new primitive number
let x3 = false;          // new primitive boolean
const x4 = {};           // new object
const x5 = [];           // new array object
const x6 = /()/;         // new regexp object
const x7 = function(){}; // new function object

Cẩn thận với các chuyển đổi kiểu tự động

JavaScript được gõ lỏng lẻo.

Một biến có thể chứa tất cả các kiểu dữ liệu.

Một biến có thể thay đổi kiểu dữ liệu của nó:

Thí dụ

let x = "Hello";     // typeof x is a string
x = 5;               // changes typeof x to a number

Hãy lưu ý rằng các số có thể vô tình được chuyển đổi thành chuỗi hoặc NaN(Không phải số).

Khi thực hiện các phép toán, JavaScript có thể chuyển đổi số thành chuỗi:

Thí dụ

let x = 5 + 7;       // x.valueOf() is 12,  typeof x is a number
let x = 5 + "7";     // x.valueOf() is 57,  typeof x is a string
let x = "5" + 7;     // x.valueOf() is 57,  typeof x is a string
let x = 5 - 7;       // x.valueOf() is -2,  typeof x is a number
let x = 5 - "7";     // x.valueOf() is -2,  typeof x is a number
let x = "5" - 7;     // x.valueOf() is -2,  typeof x is a number
let x = 5 - "x";     // x.valueOf() is NaN, typeof x is a number

Trừ một chuỗi khỏi một chuỗi, không tạo ra lỗi nhưng trả về NaN(Không phải số):

Thí dụ

"Hello" - "Dolly"    // returns NaN

Sử dụng === So sánh

Toán tử ==so sánh luôn chuyển đổi (thành các kiểu so khớp) trước khi so sánh.

Toán tử ===buộc so sánh các giá trị và kiểu:

Thí dụ

0 == "";        // true
1 == "1";       // true
1 == true;      // true

0 === "";       // false
1 === "1";      // false
1 === true;     // false

Sử dụng mặc định tham số

Nếu một hàm được gọi với một đối số bị thiếu, giá trị của đối số bị thiếu được đặt thành undefined.

Giá trị không xác định có thể phá vỡ mã của bạn. Đó là một thói quen tốt để gán các giá trị mặc định cho các đối số.

Thí dụ

function myFunction(x, y) {
  if (y === undefined) {
    y = 0;
  }
}

ECMAScript 2015 cho phép các tham số mặc định trong định nghĩa hàm:

function (a=1, b=1) { /*function code*/ }

Đọc thêm về các tham số và đối số của hàm tại Tham số hàm


Kết thúc công tắc của bạn bằng giá trị mặc định

Luôn kết thúc switchcâu lệnh của bạn bằng a default. Ngay cả khi bạn nghĩ rằng không cần thiết.

Thí dụ

switch (new Date().getDay()) {
  case 0:
    day = "Sunday";
    break;
  case 1:
    day = "Monday";
    break;
  case 2:
    day = "Tuesday";
    break;
  case 3:
    day = "Wednesday";
    break;
  case 4:
    day = "Thursday";
    break;
  case 5:
    day = "Friday";
    break;
  case 6:
    day = "Saturday";
    break;
  default:
    day = "Unknown";
}

Tránh Số, Chuỗi và Boolean dưới dạng Đối tượng

Luôn coi các số, chuỗi hoặc boolean là các giá trị nguyên thủy. Không phải là đồ vật.

Khai báo các loại này dưới dạng đối tượng, làm chậm tốc độ thực thi và tạo ra các tác dụng phụ khó chịu:

Thí dụ

let x = "John";             
let y = new String("John");
(x === y) // is false because x is a string and y is an object.

Hoặc thậm chí tệ hơn:

Thí dụ

let x = new String("John");             
let y = new String("John");
(x == y) // is false because you cannot compare objects.

Tránh sử dụng eval ()

Hàm eval()được sử dụng để chạy văn bản dưới dạng mã. Trong hầu hết các trường hợp, không cần thiết phải sử dụng nó.

Bởi vì nó cho phép chạy mã tùy ý, nó cũng đại diện cho một vấn đề bảo mật.