Hướng dẫn auto increment in javascript - tăng tự động trong javascript

Tôi muốn tạo hệ thống ID tròn để tăng số được lưu trữ cuối cùng trong tệp JSON chỉ nếu một số lệnh được chạy. Có ai biết làm thế nào để làm điều đó không? Không thể tìm thấy giải pháp ...

Show
function roundID(){
   for (var i = 0; i < client.roundID.length; i++) {
     client.roundID[i];
     console.log('there are' + i);
   }
   client.roundID [lastRoundID.toString()] = {
     roundid: '1',
     player: message.author.tag
   }
   fs.writeFile ('roundID.json', JSON.stringify(client.roundID, null, 4), err => {
     if (err) throw err;
   })
 }

Cơ sở dữ liệu: (Tôi muốn nhận tổng số lượng đối số đầu tiên trong cơ sở dữ liệu

{
"1": {
    "roundid": "1",
    "player": "name"
},
"2": {
    "roundid": "1",
    "player": "name"
}

}

Tài liệu tham khảo

Trò chuyện với chúng tôi về JavaScript

Tìm chúng tôi trên Gitter.: this guide assumes you are using Babel, and requires that you use babel-preset-airbnb or the equivalent. It also assumes you are installing shims/polyfills in your app, with airbnb-browser-shims or the equivalent.

Hướng dẫn auto increment in javascript - tăng tự động trong javascript

Người đóng góp

Xem những người đóng góp

  • Giấy phép
  • (Giấy phép MIT)
  • CSS-in-JavaScript
  • Bản quyền (c) 2012 Airbnb
  • Quyền được cấp, miễn phí, cho bất kỳ ai có được bản sao phần mềm này và các tệp tài liệu liên quan ('phần mềm'), để giải quyết phần mềm mà không bị hạn chế, bao gồm không giới hạn quyền sử dụng, sao chép, sửa đổi, hợp nhất , Xuất bản, Phân phối, Bán cấp và/hoặc Bán các bản sao của phần mềm và cho phép những người mà phần mềm được cung cấp để làm như vậy, tuân theo các điều kiện sau:

Thông báo bản quyền trên và Thông báo quyền này sẽ được bao gồm trong tất cả các bản sao hoặc các phần đáng kể của phần mềm.

  1. Phần mềm được cung cấp 'như là', không có bảo hành dưới bất kỳ hình thức nào, rõ ràng hay ngụ ý, bao gồm nhưng không giới hạn trong các bảo đảm của thương mại, thể lực cho một mục đích cụ thể và không bị thiếu sót. Trong mọi trường hợp, các tác giả hoặc chủ bản quyền sẽ phải chịu trách nhiệm đối với bất kỳ khiếu nại, thiệt hại hoặc trách nhiệm nào khác, cho dù trong hành động của hợp đồng, tra tấn hay nói cách khác, phát sinh từ hoặc liên quan đến phần mềm hoặc việc sử dụng hoặc các giao dịch khác trong PHẦN MỀM.
  2. Sửa đổi
  3. Chúng tôi khuyến khích bạn đưa ra hướng dẫn này và thay đổi các quy tắc để phù hợp với hướng dẫn phong cách nhóm của bạn. Dưới đây, bạn có thể liệt kê một số sửa đổi cho hướng dẫn kiểu. Điều này cho phép bạn định kỳ cập nhật hướng dẫn phong cách của mình mà không phải đối phó với xung đột hợp nhất.
  4. };
  5. Hướng dẫn kiểu JavaScript Airbnb () {
  6. Một cách tiếp cận chủ yếu hợp lý đối với JavaScript
  7. Lưu ý: Hướng dẫn này giả định rằng bạn đang sử dụng Babel và yêu cầu bạn sử dụng Babel-PRESET-AIRBNB hoặc tương đương. Nó cũng giả định rằng bạn đang cài đặt shims/polyfills trong ứng dụng của mình, với các shims trình duyệt Airbnb hoặc tương đương.
  8. Hướng dẫn này cũng có sẵn trong các ngôn ngữ khác. xem phiên dịch
  9. Hướng dẫn phong cách khác
  10. ES5 (không dùng nữa)
  11. Phản ứng
  12. CSS & Sass
  13. Ruby
  14. Mục lục
  15. Loại
  16. Người giới thiệu
  17. Các đối tượng
  18. Mảng
  19. Phá hủy
  20. Dây
  21. Chức năng
  22. Hàm mũi tên
  23. Các lớp & nhà xây dựng
  24. Mô -đun
  25. Tererators và máy phát điện
  26. Đặc tính
  27. Biến
  28. Kéo
  29. Các nhà khai thác và bình đẳng so sánh
  30. Khối
  31. Kiểm soát tuyên bố
  32. Bình luận
  33. Khoảng trắng
  34. Dịch
  35. Hướng dẫn kiểu JavaScript
  36. Trò chuyện với chúng tôi về JavaScript
  37. Người đóng góp
  38. Xem những người đóng góp
  39. Dịch

Phần mềm được cung cấp 'như là', không có bảo hành dưới bất kỳ hình thức nào, rõ ràng hay ngụ ý, bao gồm nhưng không giới hạn trong các bảo đảm của thương mại, thể lực cho một mục đích cụ thể và không bị thiếu sót. Trong mọi trường hợp, các tác giả hoặc chủ bản quyền sẽ phải chịu trách nhiệm đối với bất kỳ khiếu nại, thiệt hại hoặc trách nhiệm nào khác, cho dù trong hành động của hợp đồng, tra tấn hay nói cách khác, phát sinh từ hoặc liên quan đến phần mềm hoặc việc sử dụng hoặc các giao dịch khác trong PHẦN MỀM.

  • Sửa đổiPrimitives: When you access a primitive type you work directly on its value.

    • {
      "1": {
          "roundid": "1",
          "player": "name"
      },
      "2": {
          "roundid": "1",
          "player": "name"
      }
      
      51
    • {
      "1": {
          "roundid": "1",
          "player": "name"
      },
      "2": {
          "roundid": "1",
          "player": "name"
      }
      
      52
    • {
      "1": {
          "roundid": "1",
          "player": "name"
      },
      "2": {
          "roundid": "1",
          "player": "name"
      }
      
      53
    • {
      "1": {
          "roundid": "1",
          "player": "name"
      },
      "2": {
          "roundid": "1",
          "player": "name"
      }
      
      54
    • {
      "1": {
          "roundid": "1",
          "player": "name"
      },
      "2": {
          "roundid": "1",
          "player": "name"
      }
      
      55
    • {
      "1": {
          "roundid": "1",
          "player": "name"
      },
      "2": {
          "roundid": "1",
          "player": "name"
      }
      
      56
    • {
      "1": {
          "roundid": "1",
          "player": "name"
      },
      "2": {
          "roundid": "1",
          "player": "name"
      }
      
      57

    const foo = 1;
    let bar = foo;
    
    bar = 9;
    
    console.log(foo, bar); // => 1, 9

    • Chúng tôi khuyến khích bạn đưa ra hướng dẫn này và thay đổi các quy tắc để phù hợp với hướng dẫn phong cách nhóm của bạn. Dưới đây, bạn có thể liệt kê một số sửa đổi cho hướng dẫn kiểu. Điều này cho phép bạn định kỳ cập nhật hướng dẫn phong cách của mình mà không phải đối phó với xung đột hợp nhất.
  • };Complex: When you access a complex type you work on a reference to its value.

    • {
      "1": {
          "roundid": "1",
          "player": "name"
      },
      "2": {
          "roundid": "1",
          "player": "name"
      }
      
      58
    • {
      "1": {
          "roundid": "1",
          "player": "name"
      },
      "2": {
          "roundid": "1",
          "player": "name"
      }
      
      59
    • {
      "1": {
          "roundid": "1",
          "player": "name"
      },
      "2": {
          "roundid": "1",
          "player": "name"
      }
      
      60

    const foo = [1, 2];
    const bar = foo;
    
    bar[0] = 9;
    
    console.log(foo[0], bar[0]); // => 9, 9

⬆ Quay lại đầu

Sửa đổi

  • Chúng tôi khuyến khích bạn đưa ra hướng dẫn này và thay đổi các quy tắc để phù hợp với hướng dẫn phong cách nhóm của bạn. Dưới đây, bạn có thể liệt kê một số sửa đổi cho hướng dẫn kiểu. Điều này cho phép bạn định kỳ cập nhật hướng dẫn phong cách của mình mà không phải đối phó với xung đột hợp nhất.

    };

    // bad
    var a = 1;
    var b = 2;
    
    // good
    const a = 1;
    const b = 2;

  • Hướng dẫn kiểu JavaScript Airbnb () {

    Một cách tiếp cận chủ yếu hợp lý đối với JavaScript

    // bad
    var count = 1;
    if (true) {
      count += 1;
    }
    
    // good, use the let.
    let count = 1;
    if (true) {
      count += 1;
    }

  • Lưu ý: Hướng dẫn này giả định rằng bạn đang sử dụng Babel và yêu cầu bạn sử dụng Babel-PRESET-AIRBNB hoặc tương đương. Nó cũng giả định rằng bạn đang cài đặt shims/polyfills trong ứng dụng của mình, với các shims trình duyệt Airbnb hoặc tương đương.

    // const and let only exist in the blocks they are defined in.
    {
      let a = 1;
      const b = 1;
      var c = 1;
    }
    console.log(a); // ReferenceError
    console.log(b); // ReferenceError
    console.log(c); // Prints 1

    Hướng dẫn này cũng có sẵn trong các ngôn ngữ khác. xem phiên dịch

⬆ Quay lại đầu

Chúng tôi khuyến khích bạn đưa ra hướng dẫn này và thay đổi các quy tắc để phù hợp với hướng dẫn phong cách nhóm của bạn. Dưới đây, bạn có thể liệt kê một số sửa đổi cho hướng dẫn kiểu. Điều này cho phép bạn định kỳ cập nhật hướng dẫn phong cách của mình mà không phải đối phó với xung đột hợp nhất.

  • };

    // bad
    const item = new Object();
    
    // good
    const item = {};

  • Hướng dẫn kiểu JavaScript Airbnb () {

    Tại sao? Chúng cho phép bạn xác định tất cả các thuộc tính của một đối tượng ở một nơi.

    function getKey(k) {
      return `a key named ${k}`;
    }
    
    // bad
    const obj = {
      id: 5,
      name: 'San Francisco',
    };
    obj[getKey('enabled')] = true;
    
    // good
    const obj = {
      id: 5,
      name: 'San Francisco',
      [getKey('enabled')]: true,
    };

  • 3.3 Sử dụng phương pháp đối tượng tốc ký. ESLINT:

    {
    "1": {
        "roundid": "1",
        "player": "name"
    },
    "2": {
        "roundid": "1",
        "player": "name"
    }
    
    80

    // bad
    const atom = {
      value: 1,
    
      addValue: function (value) {
        return atom.value + value;
      },
    };
    
    // good
    const atom = {
      value: 1,
    
      addValue(value) {
        return atom.value + value;
      },
    };

  • 3.4 Sử dụng giá trị tài sản tốc ký. ESLINT:

    {
    "1": {
        "roundid": "1",
        "player": "name"
    },
    "2": {
        "roundid": "1",
        "player": "name"
    }
    
    80

    Tại sao? Nó ngắn hơn và mô tả.

    {
    "1": {
        "roundid": "1",
        "player": "name"
    },
    "2": {
        "roundid": "1",
        "player": "name"
    }
    
    0

  • 3.5 Nhóm thuộc tính tốc ký của bạn khi bắt đầu khai báo đối tượng của bạn.

    Tại sao? Nó dễ dàng hơn để nói những thuộc tính nào đang sử dụng tốc ký.

    {
    "1": {
        "roundid": "1",
        "player": "name"
    },
    "2": {
        "roundid": "1",
        "player": "name"
    }
    
    1

  • 3.6 Chỉ có các thuộc tính báo giá là định danh không hợp lệ. ESLINT:

    {
    "1": {
        "roundid": "1",
        "player": "name"
    },
    "2": {
        "roundid": "1",
        "player": "name"
    }
    
    82

    Tại sao? Nói chung, chúng tôi xem xét nó chủ quan dễ đọc hơn. Nó cải thiện sự nổi bật của cú pháp, và cũng dễ dàng được tối ưu hóa hơn bởi nhiều động cơ JS.

    {
    "1": {
        "roundid": "1",
        "player": "name"
    },
    "2": {
        "roundid": "1",
        "player": "name"
    }
    
    2

  • 3.7 Không gọi các phương thức

    {
    "1": {
        "roundid": "1",
        "player": "name"
    },
    "2": {
        "roundid": "1",
        "player": "name"
    }
    
    83 trực tiếp, chẳng hạn như
    {
    "1": {
        "roundid": "1",
        "player": "name"
    },
    "2": {
        "roundid": "1",
        "player": "name"
    }
    
    84,
    {
    "1": {
        "roundid": "1",
        "player": "name"
    },
    "2": {
        "roundid": "1",
        "player": "name"
    }
    
    85 và
    {
    "1": {
        "roundid": "1",
        "player": "name"
    },
    "2": {
        "roundid": "1",
        "player": "name"
    }
    
    86. ESLINT:
    {
    "1": {
        "roundid": "1",
        "player": "name"
    },
    "2": {
        "roundid": "1",
        "player": "name"
    }
    
    87

    Tại sao? Các phương thức này có thể bị che mờ bởi các thuộc tính trên đối tượng trong câu hỏi - hãy xem xét

    {
    "1": {
        "roundid": "1",
        "player": "name"
    },
    "2": {
        "roundid": "1",
        "player": "name"
    }
    
    88 - hoặc, đối tượng có thể là một đối tượng null (
    {
    "1": {
        "roundid": "1",
        "player": "name"
    },
    "2": {
        "roundid": "1",
        "player": "name"
    }
    
    89).

    {
    "1": {
        "roundid": "1",
        "player": "name"
    },
    "2": {
        "roundid": "1",
        "player": "name"
    }
    
    3

  • 3.8 Thích cú pháp lan truyền của đối tượng hơn

    {
    "1": {
        "roundid": "1",
        "player": "name"
    },
    "2": {
        "roundid": "1",
        "player": "name"
    }
    
    90 đến các đối tượng sao chép nông. Sử dụng cú pháp tham số REST đối tượng để có được một đối tượng mới với các thuộc tính nhất định bị bỏ qua. ESLINT:
    {
    "1": {
        "roundid": "1",
        "player": "name"
    },
    "2": {
        "roundid": "1",
        "player": "name"
    }
    
    91

    {
    "1": {
        "roundid": "1",
        "player": "name"
    },
    "2": {
        "roundid": "1",
        "player": "name"
    }
    
    4

⬆ Quay lại đầu

Mảng

  • 4.1 Sử dụng cú pháp theo nghĩa đen để tạo mảng. ESLINT:

    {
    "1": {
        "roundid": "1",
        "player": "name"
    },
    "2": {
        "roundid": "1",
        "player": "name"
    }
    
    92

    {
    "1": {
        "roundid": "1",
        "player": "name"
    },
    "2": {
        "roundid": "1",
        "player": "name"
    }
    
    5

  • 4.2 Sử dụng Array#Push thay vì gán trực tiếp để thêm các mục vào một mảng.

    {
    "1": {
        "roundid": "1",
        "player": "name"
    },
    "2": {
        "roundid": "1",
        "player": "name"
    }
    
    6

  • 4.3 Sử dụng chênh lệch mảng

    {
    "1": {
        "roundid": "1",
        "player": "name"
    },
    "2": {
        "roundid": "1",
        "player": "name"
    }
    
    93 để sao chép mảng.

    {
    "1": {
        "roundid": "1",
        "player": "name"
    },
    "2": {
        "roundid": "1",
        "player": "name"
    }
    
    7

  • 4.4 Để chuyển đổi một đối tượng có thể lặp lại thành một mảng, sử dụng chênh lệch

    {
    "1": {
        "roundid": "1",
        "player": "name"
    },
    "2": {
        "roundid": "1",
        "player": "name"
    }
    
    93 thay vì
    {
    "1": {
        "roundid": "1",
        "player": "name"
    },
    "2": {
        "roundid": "1",
        "player": "name"
    }
    
    95

    {
    "1": {
        "roundid": "1",
        "player": "name"
    },
    "2": {
        "roundid": "1",
        "player": "name"
    }
    
    8

  • 4.5 Sử dụng

    {
    "1": {
        "roundid": "1",
        "player": "name"
    },
    "2": {
        "roundid": "1",
        "player": "name"
    }
    
    95 để chuyển đổi một đối tượng giống như mảng thành một mảng.

    {
    "1": {
        "roundid": "1",
        "player": "name"
    },
    "2": {
        "roundid": "1",
        "player": "name"
    }
    
    9

  • 4.6 Sử dụng

    {
    "1": {
        "roundid": "1",
        "player": "name"
    },
    "2": {
        "roundid": "1",
        "player": "name"
    }
    
    95 thay vì lan truyền
    {
    "1": {
        "roundid": "1",
        "player": "name"
    },
    "2": {
        "roundid": "1",
        "player": "name"
    }
    
    93 để ánh xạ qua Iterables, bởi vì nó tránh tạo ra một mảng trung gian.

    const foo = 1;
    let bar = foo;
    
    bar = 9;
    
    console.log(foo, bar); // => 1, 9
    0

  • 4.7 Sử dụng các câu lệnh trả về trong các cuộc gọi lại của phương thức mảng. Nó có thể bỏ qua sự trở lại nếu cơ thể hàm bao gồm một câu lệnh trả về một biểu thức không có tác dụng phụ, sau 8.2. ESLINT:

    {
    "1": {
        "roundid": "1",
        "player": "name"
    },
    "2": {
        "roundid": "1",
        "player": "name"
    }
    
    99

    const foo = 1;
    let bar = foo;
    
    bar = 9;
    
    console.log(foo, bar); // => 1, 9
    1

  • 4.8 Sử dụng đường ngắt sau khi mở và trước khi đóng khung mảng nếu một mảng có nhiều dòng

    const foo = 1;
    let bar = foo;
    
    bar = 9;
    
    console.log(foo, bar); // => 1, 9
    2

⬆ Quay lại đầu

Mảng

  • 4.1 Sử dụng cú pháp theo nghĩa đen để tạo mảng. ESLINT:

    {
    "1": {
        "roundid": "1",
        "player": "name"
    },
    "2": {
        "roundid": "1",
        "player": "name"
    }
    
    92

    4.2 Sử dụng Array#Push thay vì gán trực tiếp để thêm các mục vào một mảng.

    const foo = 1;
    let bar = foo;
    
    bar = 9;
    
    console.log(foo, bar); // => 1, 9
    3

  • 4.3 Sử dụng chênh lệch mảng

    {
    "1": {
        "roundid": "1",
        "player": "name"
    },
    "2": {
        "roundid": "1",
        "player": "name"
    }
    
    93 để sao chép mảng.

    const foo = 1;
    let bar = foo;
    
    bar = 9;
    
    console.log(foo, bar); // => 1, 9
    4

  • 4.4 Để chuyển đổi một đối tượng có thể lặp lại thành một mảng, sử dụng chênh lệch

    {
    "1": {
        "roundid": "1",
        "player": "name"
    },
    "2": {
        "roundid": "1",
        "player": "name"
    }
    
    93 thay vì
    {
    "1": {
        "roundid": "1",
        "player": "name"
    },
    "2": {
        "roundid": "1",
        "player": "name"
    }
    
    95

    4.5 Sử dụng

    {
    "1": {
        "roundid": "1",
        "player": "name"
    },
    "2": {
        "roundid": "1",
        "player": "name"
    }
    
    95 để chuyển đổi một đối tượng giống như mảng thành một mảng.

    const foo = 1;
    let bar = foo;
    
    bar = 9;
    
    console.log(foo, bar); // => 1, 9
    5

⬆ Quay lại đầu

Mảng

  • 4.1 Sử dụng cú pháp theo nghĩa đen để tạo mảng. ESLINT:

    {
    "1": {
        "roundid": "1",
        "player": "name"
    },
    "2": {
        "roundid": "1",
        "player": "name"
    }
    
    92

    const foo = 1;
    let bar = foo;
    
    bar = 9;
    
    console.log(foo, bar); // => 1, 9
    6

  • 4.2 Sử dụng Array#Push thay vì gán trực tiếp để thêm các mục vào một mảng.

    4.3 Sử dụng chênh lệch mảng

    {
    "1": {
        "roundid": "1",
        "player": "name"
    },
    "2": {
        "roundid": "1",
        "player": "name"
    }
    
    93 để sao chép mảng.

    const foo = 1;
    let bar = foo;
    
    bar = 9;
    
    console.log(foo, bar); // => 1, 9
    7

  • 4.4 Để chuyển đổi một đối tượng có thể lặp lại thành một mảng, sử dụng chênh lệch

    {
    "1": {
        "roundid": "1",
        "player": "name"
    },
    "2": {
        "roundid": "1",
        "player": "name"
    }
    
    93 thay vì
    {
    "1": {
        "roundid": "1",
        "player": "name"
    },
    "2": {
        "roundid": "1",
        "player": "name"
    }
    
    95

    4.5 Sử dụng

    {
    "1": {
        "roundid": "1",
        "player": "name"
    },
    "2": {
        "roundid": "1",
        "player": "name"
    }
    
    95 để chuyển đổi một đối tượng giống như mảng thành một mảng.

    const foo = 1;
    let bar = foo;
    
    bar = 9;
    
    console.log(foo, bar); // => 1, 9
    8

  • 4.6 Sử dụng
    {
    "1": {
        "roundid": "1",
        "player": "name"
    },
    "2": {
        "roundid": "1",
        "player": "name"
    }
    
    95 thay vì lan truyền
    {
    "1": {
        "roundid": "1",
        "player": "name"
    },
    "2": {
        "roundid": "1",
        "player": "name"
    }
    
    93 để ánh xạ qua Iterables, bởi vì nó tránh tạo ra một mảng trung gian.
  • 4.7 Sử dụng các câu lệnh trả về trong các cuộc gọi lại của phương thức mảng. Nó có thể bỏ qua sự trở lại nếu cơ thể hàm bao gồm một câu lệnh trả về một biểu thức không có tác dụng phụ, sau 8.2. ESLINT:

    {
    "1": {
        "roundid": "1",
        "player": "name"
    },
    "2": {
        "roundid": "1",
        "player": "name"
    }
    
    99

    4.8 Sử dụng đường ngắt sau khi mở và trước khi đóng khung mảng nếu một mảng có nhiều dòng

    const foo = 1;
    let bar = foo;
    
    bar = 9;
    
    console.log(foo, bar); // => 1, 9
    9

⬆ Quay lại đầu

Mảng

  • 4.1 Sử dụng cú pháp theo nghĩa đen để tạo mảng. ESLINT:

    {
    "1": {
        "roundid": "1",
        "player": "name"
    },
    "2": {
        "roundid": "1",
        "player": "name"
    }
    
    92

    4.2 Sử dụng Array#Push thay vì gán trực tiếp để thêm các mục vào một mảng.

    const foo = [1, 2];
    const bar = foo;
    
    bar[0] = 9;
    
    console.log(foo[0], bar[0]); // => 9, 9
    0

  • 4.3 Sử dụng chênh lệch mảng

    {
    "1": {
        "roundid": "1",
        "player": "name"
    },
    "2": {
        "roundid": "1",
        "player": "name"
    }
    
    93 để sao chép mảng.

    Tại sao? Một biểu thức chức năng được gọi ngay lập tức là một đơn vị duy nhất - bao bọc cả nó và các parens gọi của nó, trong parens, thể hiện rõ ràng điều này. Lưu ý rằng trong một thế giới với các mô -đun ở khắp mọi nơi, bạn gần như không bao giờ cần một iife.

    const foo = [1, 2];
    const bar = foo;
    
    bar[0] = 9;
    
    console.log(foo[0], bar[0]); // => 9, 9
    1

  • 7.3 Không bao giờ khai báo một hàm trong một khối không chức năng (
    const foo = 1;
    let bar = foo;
    
    bar = 9;
    
    console.log(foo, bar); // => 1, 9
    11,
    const foo = 1;
    let bar = foo;
    
    bar = 9;
    
    console.log(foo, bar); // => 1, 9
    12, v.v.). Thay vào đó, gán chức năng cho một biến. Các trình duyệt sẽ cho phép bạn làm điều đó, nhưng tất cả chúng đều diễn giải nó khác nhau, đó là những tin tức xấu. ESLINT:
    const foo = 1;
    let bar = foo;
    
    bar = 9;
    
    console.log(foo, bar); // => 1, 9
    13
  • 7.4 Lưu ý: ECMA-262 định nghĩa

    const foo = 1;
    let bar = foo;
    
    bar = 9;
    
    console.log(foo, bar); // => 1, 9
    14 là danh sách các câu lệnh. Một tuyên bố chức năng không phải là một tuyên bố.Note: ECMA-262 defines a
    const foo = 1;
    let bar = foo;
    
    bar = 9;
    
    console.log(foo, bar); // => 1, 9
    14 as a list of statements. A function declaration is not a statement.

    const foo = [1, 2];
    const bar = foo;
    
    bar[0] = 9;
    
    console.log(foo[0], bar[0]); // => 9, 9
    2

  • 7.5 Không bao giờ đặt tên cho một tham số

    const foo = 1;
    let bar = foo;
    
    bar = 9;
    
    console.log(foo, bar); // => 1, 9
    15. Điều này sẽ được ưu tiên hơn đối tượng
    const foo = 1;
    let bar = foo;
    
    bar = 9;
    
    console.log(foo, bar); // => 1, 9
    15 được trao cho mọi phạm vi chức năng.

    const foo = [1, 2];
    const bar = foo;
    
    bar[0] = 9;
    
    console.log(foo[0], bar[0]); // => 9, 9
    3

  • 7.6 Không bao giờ sử dụng

    const foo = 1;
    let bar = foo;
    
    bar = 9;
    
    console.log(foo, bar); // => 1, 9
    15, chọn sử dụng cú pháp REST
    {
    "1": {
        "roundid": "1",
        "player": "name"
    },
    "2": {
        "roundid": "1",
        "player": "name"
    }
    
    93 thay thế. ESLINT:
    const foo = 1;
    let bar = foo;
    
    bar = 9;
    
    console.log(foo, bar); // => 1, 9
    19

    Tại sao?

    {
    "1": {
        "roundid": "1",
        "player": "name"
    },
    "2": {
        "roundid": "1",
        "player": "name"
    }
    
    93 rõ ràng về những đối số bạn muốn kéo. Thêm vào đó, các đối số REST là một mảng thực sự, và không chỉ đơn thuần là giống như
    const foo = 1;
    let bar = foo;
    
    bar = 9;
    
    console.log(foo, bar); // => 1, 9
    15.

    const foo = [1, 2];
    const bar = foo;
    
    bar[0] = 9;
    
    console.log(foo[0], bar[0]); // => 9, 9
    4

  • 7.7 Sử dụng cú pháp tham số mặc định thay vì các đối số chức năng đột biến.

    const foo = [1, 2];
    const bar = foo;
    
    bar[0] = 9;
    
    console.log(foo[0], bar[0]); // => 9, 9
    5

  • 7.8 Tránh các tác dụng phụ với các tham số mặc định.

    Tại sao? Họ khó hiểu để lý luận về.

    const foo = [1, 2];
    const bar = foo;
    
    bar[0] = 9;
    
    console.log(foo[0], bar[0]); // => 9, 9
    6

  • 7.9 Luôn đặt các tham số mặc định cuối cùng. ESLINT:

    const foo = 1;
    let bar = foo;
    
    bar = 9;
    
    console.log(foo, bar); // => 1, 9
    22

    const foo = [1, 2];
    const bar = foo;
    
    bar[0] = 9;
    
    console.log(foo[0], bar[0]); // => 9, 9
    7

  • 7.10 Không bao giờ sử dụng hàm tạo hàm để tạo chức năng mới. ESLINT:

    const foo = 1;
    let bar = foo;
    
    bar = 9;
    
    console.log(foo, bar); // => 1, 9
    23

    Tại sao? Tạo một chức năng theo cách này đánh giá một chuỗi tương tự như

    const foo = 1;
    let bar = foo;
    
    bar = 9;
    
    console.log(foo, bar); // => 1, 9
    06, mở các lỗ hổng.

    const foo = [1, 2];
    const bar = foo;
    
    bar[0] = 9;
    
    console.log(foo[0], bar[0]); // => 9, 9
    8

  • 7.11 Khoảng cách trong một chữ ký chức năng. ESLint:

    const foo = 1;
    let bar = foo;
    
    bar = 9;
    
    console.log(foo, bar); // => 1, 9
    25
    const foo = 1;
    let bar = foo;
    
    bar = 9;
    
    console.log(foo, bar); // => 1, 9
    26

    Tại sao? Tính nhất quán là tốt, và bạn không nên thêm hoặc xóa một khoảng trống khi thêm hoặc xóa tên.

    const foo = [1, 2];
    const bar = foo;
    
    bar[0] = 9;
    
    console.log(foo[0], bar[0]); // => 9, 9
    9

  • 7.12 Không bao giờ đột biến các tham số. ESLINT:

    const foo = 1;
    let bar = foo;
    
    bar = 9;
    
    console.log(foo, bar); // => 1, 9
    27

    Tại sao? Thao tác các đối tượng được truyền trong các tham số có thể gây ra các tác dụng phụ biến không mong muốn trong người gọi ban đầu.

    // bad
    var a = 1;
    var b = 2;
    
    // good
    const a = 1;
    const b = 2;
    0

  • 7.13 Không bao giờ chỉ định lại các tham số. ESLINT:

    const foo = 1;
    let bar = foo;
    
    bar = 9;
    
    console.log(foo, bar); // => 1, 9
    27

    Tại sao? Việc chỉ định lại các tham số có thể dẫn đến hành vi bất ngờ, đặc biệt là khi truy cập đối tượng

    const foo = 1;
    let bar = foo;
    
    bar = 9;
    
    console.log(foo, bar); // => 1, 9
    15. Nó cũng có thể gây ra các vấn đề tối ưu hóa, đặc biệt là trong V8.

    // bad
    var a = 1;
    var b = 2;
    
    // good
    const a = 1;
    const b = 2;
    1

  • 7.14 Thích sử dụng cú pháp lan truyền

    {
    "1": {
        "roundid": "1",
        "player": "name"
    },
    "2": {
        "roundid": "1",
        "player": "name"
    }
    
    93 để gọi các hàm variadic. ESLINT:
    const foo = 1;
    let bar = foo;
    
    bar = 9;
    
    console.log(foo, bar); // => 1, 9
    31

    Tại sao? Nó sạch hơn, bạn không cần cung cấp một bối cảnh và bạn không thể dễ dàng soạn

    const foo = 1;
    let bar = foo;
    
    bar = 9;
    
    console.log(foo, bar); // => 1, 9
    32 với
    const foo = 1;
    let bar = foo;
    
    bar = 9;
    
    console.log(foo, bar); // => 1, 9
    33.

    // bad
    var a = 1;
    var b = 2;
    
    // good
    const a = 1;
    const b = 2;
    2

  • 7.15 Các chức năng với chữ ký đa dòng hoặc các yêu cầu, nên được thụt vào giống như mọi danh sách đa dòng khác trong hướng dẫn này: với mỗi mục trên một dòng, với dấu phẩy kéo dài trên mục cuối cùng. ESLINT:

    const foo = 1;
    let bar = foo;
    
    bar = 9;
    
    console.log(foo, bar); // => 1, 9
    34

    // bad
    var a = 1;
    var b = 2;
    
    // good
    const a = 1;
    const b = 2;
    3

⬆ Quay lại đầu

Hàm mũi tên

  • 8.1 Khi bạn phải sử dụng hàm ẩn danh (như khi chuyển cuộc gọi lại nội tuyến), hãy sử dụng ký hiệu chức năng mũi tên. ESLint:

    const foo = 1;
    let bar = foo;
    
    bar = 9;
    
    console.log(foo, bar); // => 1, 9
    35,
    const foo = 1;
    let bar = foo;
    
    bar = 9;
    
    console.log(foo, bar); // => 1, 9
    36

    Tại sao? Nó tạo ra một phiên bản của hàm thực thi trong bối cảnh

    const foo = 1;
    let bar = foo;
    
    bar = 9;
    
    console.log(foo, bar); // => 1, 9
    37, thường là những gì bạn muốn và là một cú pháp ngắn gọn hơn.

    Tại sao không? Nếu bạn có một chức năng khá phức tạp, bạn có thể chuyển logic đó ra biểu thức chức năng được đặt tên của riêng nó.

    // bad
    var a = 1;
    var b = 2;
    
    // good
    const a = 1;
    const b = 2;
    4

  • 8.2 Nếu cơ thể hàm bao gồm một câu lệnh trả về một biểu thức không có tác dụng phụ, hãy bỏ qua niềng răng và sử dụng lợi nhuận ngầm. Nếu không, hãy giữ niềng răng và sử dụng câu lệnh

    const foo = 1;
    let bar = foo;
    
    bar = 9;
    
    console.log(foo, bar); // => 1, 9
    38. ESLint:
    const foo = 1;
    let bar = foo;
    
    bar = 9;
    
    console.log(foo, bar); // => 1, 9
    39,
    const foo = 1;
    let bar = foo;
    
    bar = 9;
    
    console.log(foo, bar); // => 1, 9
    40

    Tại sao? Cú pháp đặc biệt. Nó đọc tốt khi nhiều chức năng được xích lại với nhau.

    // bad
    var a = 1;
    var b = 2;
    
    // good
    const a = 1;
    const b = 2;
    5

  • 8.3 Trong trường hợp biểu thức kéo dài trên nhiều dòng, hãy bọc nó trong ngoặc đơn để dễ đọc hơn.

    Tại sao? Nó cho thấy rõ nơi chức năng bắt đầu và kết thúc.

    // bad
    var a = 1;
    var b = 2;
    
    // good
    const a = 1;
    const b = 2;
    6

  • 8.4 Luôn bao gồm các dấu ngoặc đơn xung quanh các đối số cho sự rõ ràng và nhất quán. ESLINT:

    const foo = 1;
    let bar = foo;
    
    bar = 9;
    
    console.log(foo, bar); // => 1, 9
    39

    Tại sao? Tối thiểu hóa khu vực khác khi thêm hoặc loại bỏ các đối số.

    // bad
    var a = 1;
    var b = 2;
    
    // good
    const a = 1;
    const b = 2;
    7

  • 8.5 Tránh cú pháp chức năng mũi tên nhầm lẫn (

    const foo = 1;
    let bar = foo;
    
    bar = 9;
    
    console.log(foo, bar); // => 1, 9
    42) với các toán tử so sánh (
    const foo = 1;
    let bar = foo;
    
    bar = 9;
    
    console.log(foo, bar); // => 1, 9
    43,
    const foo = 1;
    let bar = foo;
    
    bar = 9;
    
    console.log(foo, bar); // => 1, 9
    44). ESLINT:
    const foo = 1;
    let bar = foo;
    
    bar = 9;
    
    console.log(foo, bar); // => 1, 9
    45

    // bad
    var a = 1;
    var b = 2;
    
    // good
    const a = 1;
    const b = 2;
    8

  • 8.6 Thực thi vị trí của các cơ quan chức năng mũi tên có lợi nhuận ngầm. ESLINT:

    const foo = 1;
    let bar = foo;
    
    bar = 9;
    
    console.log(foo, bar); // => 1, 9
    46

    // bad
    var a = 1;
    var b = 2;
    
    // good
    const a = 1;
    const b = 2;
    9

⬆ Quay lại đầu

Hàm mũi tên

  • 8.1 Khi bạn phải sử dụng hàm ẩn danh (như khi chuyển cuộc gọi lại nội tuyến), hãy sử dụng ký hiệu chức năng mũi tên. ESLint:

    const foo = 1;
    let bar = foo;
    
    bar = 9;
    
    console.log(foo, bar); // => 1, 9
    35,
    const foo = 1;
    let bar = foo;
    
    bar = 9;
    
    console.log(foo, bar); // => 1, 9
    36

    Tại sao? Nó tạo ra một phiên bản của hàm thực thi trong bối cảnh

    const foo = 1;
    let bar = foo;
    
    bar = 9;
    
    console.log(foo, bar); // => 1, 9
    37, thường là những gì bạn muốn và là một cú pháp ngắn gọn hơn.

    // bad
    var count = 1;
    if (true) {
      count += 1;
    }
    
    // good, use the let.
    let count = 1;
    if (true) {
      count += 1;
    }
    0

  • Tại sao không? Nếu bạn có một chức năng khá phức tạp, bạn có thể chuyển logic đó ra biểu thức chức năng được đặt tên của riêng nó.

    8.2 Nếu cơ thể hàm bao gồm một câu lệnh trả về một biểu thức không có tác dụng phụ, hãy bỏ qua niềng răng và sử dụng lợi nhuận ngầm. Nếu không, hãy giữ niềng răng và sử dụng câu lệnh

    const foo = 1;
    let bar = foo;
    
    bar = 9;
    
    console.log(foo, bar); // => 1, 9
    38. ESLint:
    const foo = 1;
    let bar = foo;
    
    bar = 9;
    
    console.log(foo, bar); // => 1, 9
    39,
    const foo = 1;
    let bar = foo;
    
    bar = 9;
    
    console.log(foo, bar); // => 1, 9
    40

    // bad
    var count = 1;
    if (true) {
      count += 1;
    }
    
    // good, use the let.
    let count = 1;
    if (true) {
      count += 1;
    }
    1

  • Tại sao? Cú pháp đặc biệt. Nó đọc tốt khi nhiều chức năng được xích lại với nhau.

    // bad
    var count = 1;
    if (true) {
      count += 1;
    }
    
    // good, use the let.
    let count = 1;
    if (true) {
      count += 1;
    }
    2

  • 8.3 Trong trường hợp biểu thức kéo dài trên nhiều dòng, hãy bọc nó trong ngoặc đơn để dễ đọc hơn.

    // bad
    var count = 1;
    if (true) {
      count += 1;
    }
    
    // good, use the let.
    let count = 1;
    if (true) {
      count += 1;
    }
    3

  • Tại sao? Nó cho thấy rõ nơi chức năng bắt đầu và kết thúc.

    // bad
    var count = 1;
    if (true) {
      count += 1;
    }
    
    // good, use the let.
    let count = 1;
    if (true) {
      count += 1;
    }
    4

  • 9.6 Tránh các thành viên lớp học trùng lặp. ESLINT:

    const foo = 1;
    let bar = foo;
    
    bar = 9;
    
    console.log(foo, bar); // => 1, 9
    55

    Tại sao? Các tuyên bố của thành viên lớp học trùng lặp sẽ âm thầm thích cái cuối cùng - có các bản sao gần như chắc chắn là một lỗi.

    // bad
    var count = 1;
    if (true) {
      count += 1;
    }
    
    // good, use the let.
    let count = 1;
    if (true) {
      count += 1;
    }
    5

  • 9.7 Phương pháp lớp nên sử dụng

    const foo = 1;
    let bar = foo;
    
    bar = 9;
    
    console.log(foo, bar); // => 1, 9
    37 hoặc được thực hiện thành phương thức tĩnh trừ khi thư viện hoặc khung bên ngoài yêu cầu sử dụng các phương thức không tĩnh cụ thể. Là một phương thức thể hiện nên chỉ ra rằng nó hoạt động khác nhau dựa trên các thuộc tính của máy thu. ESLINT:
    const foo = 1;
    let bar = foo;
    
    bar = 9;
    
    console.log(foo, bar); // => 1, 9
    57

    // bad
    var count = 1;
    if (true) {
      count += 1;
    }
    
    // good, use the let.
    let count = 1;
    if (true) {
      count += 1;
    }
    6

⬆ Quay lại đầu

Mô -đun

  • 10.1 Luôn sử dụng các mô-đun (________ 258/________ 259) trên hệ thống mô-đun không chuẩn. Bạn luôn có thể chuyển sang hệ thống mô -đun ưa thích của mình.

    Tại sao? Các mô -đun là tương lai, hãy để bắt đầu sử dụng tương lai ngay bây giờ.

    // bad
    var count = 1;
    if (true) {
      count += 1;
    }
    
    // good, use the let.
    let count = 1;
    if (true) {
      count += 1;
    }
    7

  • 10.2 Không sử dụng nhập khẩu ký tự đại diện.

    Tại sao? Điều này đảm bảo bạn có một xuất khẩu mặc định duy nhất.

    // bad
    var count = 1;
    if (true) {
      count += 1;
    }
    
    // good, use the let.
    let count = 1;
    if (true) {
      count += 1;
    }
    8

  • 10.3 và không xuất trực tiếp từ nhập khẩu.

    Tại sao? Mặc dù một lớp lót là súc tích, có một cách rõ ràng để nhập khẩu và một cách rõ ràng để xuất khẩu làm cho mọi thứ nhất quán.

    // bad
    var count = 1;
    if (true) {
      count += 1;
    }
    
    // good, use the let.
    let count = 1;
    if (true) {
      count += 1;
    }
    9

  • 10.4 Chỉ nhập từ một đường dẫn ở một nơi. ESLINT:

    const foo = 1;
    let bar = foo;
    
    bar = 9;
    
    console.log(foo, bar); // => 1, 9
    60

    Tại sao? Có nhiều dòng nhập từ cùng một đường dẫn có thể làm cho mã khó duy trì hơn.

    // const and let only exist in the blocks they are defined in.
    {
      let a = 1;
      const b = 1;
      var c = 1;
    }
    console.log(a); // ReferenceError
    console.log(b); // ReferenceError
    console.log(c); // Prints 1
    0

  • 10.5 Không xuất khẩu ràng buộc đột biến. ESLINT:

    const foo = 1;
    let bar = foo;
    
    bar = 9;
    
    console.log(foo, bar); // => 1, 9
    61

    Tại sao? Đột biến nên tránh nói chung, nhưng đặc biệt là khi xuất các ràng buộc có thể thay đổi. Mặc dù kỹ thuật này có thể cần thiết cho một số trường hợp đặc biệt, nói chung, chỉ nên xuất khẩu các tài liệu tham khảo không đổi.

    // const and let only exist in the blocks they are defined in.
    {
      let a = 1;
      const b = 1;
      var c = 1;
    }
    console.log(a); // ReferenceError
    console.log(b); // ReferenceError
    console.log(c); // Prints 1
    1

  • 10.6 Trong các mô -đun với một lần xuất, thích xuất mặc định hơn xuất khẩu được đặt tên. ESLINT:

    const foo = 1;
    let bar = foo;
    
    bar = 9;
    
    console.log(foo, bar); // => 1, 9
    62

    Tại sao? Để khuyến khích nhiều tệp hơn mà chỉ xuất khẩu một thứ, tốt hơn cho khả năng đọc và khả năng bảo trì.

    // const and let only exist in the blocks they are defined in.
    {
      let a = 1;
      const b = 1;
      var c = 1;
    }
    console.log(a); // ReferenceError
    console.log(b); // ReferenceError
    console.log(c); // Prints 1
    2

  • 10.7 Đặt tất cả các tuyên bố không phải là người không chú ý. ESLINT:

    const foo = 1;
    let bar = foo;
    
    bar = 9;
    
    console.log(foo, bar); // => 1, 9
    64

    Tại sao? Vì

    const foo = 1;
    let bar = foo;
    
    bar = 9;
    
    console.log(foo, bar); // => 1, 9
    58 được nâng lên, giữ tất cả chúng ở vị trí hàng đầu ngăn chặn hành vi đáng ngạc nhiên.

    // const and let only exist in the blocks they are defined in.
    {
      let a = 1;
      const b = 1;
      var c = 1;
    }
    console.log(a); // ReferenceError
    console.log(b); // ReferenceError
    console.log(c); // Prints 1
    3

  • 10.8 Nhập khẩu đa dòng phải được thụt vào giống như mảng đa dòng và chữ cái. ESLINT:

    const foo = 1;
    let bar = foo;
    
    bar = 9;
    
    console.log(foo, bar); // => 1, 9
    66

    Tại sao? Niềng răng xoăn tuân theo các quy tắc thụt tương tự như mọi khối niềng răng xoăn khác trong hướng dẫn kiểu, cũng như dấu phẩy.

    // const and let only exist in the blocks they are defined in.
    {
      let a = 1;
      const b = 1;
      var c = 1;
    }
    console.log(a); // ReferenceError
    console.log(b); // ReferenceError
    console.log(c); // Prints 1
    4

  • 10.9 DISALLOW Webpack Loader Cú pháp trong các câu lệnh nhập mô -đun. ESLINT:

    const foo = 1;
    let bar = foo;
    
    bar = 9;
    
    console.log(foo, bar); // => 1, 9
    67

    Tại sao? Vì sử dụng cú pháp WebPack trong các kết hợp nhập mã vào một người đóng gói mô -đun. Thích sử dụng cú pháp Loader trong

    const foo = 1;
    let bar = foo;
    
    bar = 9;
    
    console.log(foo, bar); // => 1, 9
    68.

    // const and let only exist in the blocks they are defined in.
    {
      let a = 1;
      const b = 1;
      var c = 1;
    }
    console.log(a); // ReferenceError
    console.log(b); // ReferenceError
    console.log(c); // Prints 1
    5

  • 10.10 Không bao gồm các phần mở rộng tên tệp JavaScript ESLINT:

    const foo = 1;
    let bar = foo;
    
    bar = 9;
    
    console.log(foo, bar); // => 1, 9
    69

    Tại sao? Bao gồm các phần mở rộng ức chế tái cấu trúc và các chi tiết thực hiện mã cứng không phù hợp của mô -đun bạn đang nhập trong mỗi người tiêu dùng.

    // const and let only exist in the blocks they are defined in.
    {
      let a = 1;
      const b = 1;
      var c = 1;
    }
    console.log(a); // ReferenceError
    console.log(b); // ReferenceError
    console.log(c); // Prints 1
    6

⬆ Quay lại đầu

Mô -đun

  • 10.1 Luôn sử dụng các mô-đun (________ 258/________ 259) trên hệ thống mô-đun không chuẩn. Bạn luôn có thể chuyển sang hệ thống mô -đun ưa thích của mình.

    Tại sao? Các mô -đun là tương lai, hãy để bắt đầu sử dụng tương lai ngay bây giờ.

    10.2 Không sử dụng nhập khẩu ký tự đại diện.

    // const and let only exist in the blocks they are defined in.
    {
      let a = 1;
      const b = 1;
      var c = 1;
    }
    console.log(a); // ReferenceError
    console.log(b); // ReferenceError
    console.log(c); // Prints 1
    7

  • Tại sao? Điều này đảm bảo bạn có một xuất khẩu mặc định duy nhất.

    10.3 và không xuất trực tiếp từ nhập khẩu.

  • Tại sao? Mặc dù một lớp lót là súc tích, có một cách rõ ràng để nhập khẩu và một cách rõ ràng để xuất khẩu làm cho mọi thứ nhất quán.

    10.4 Chỉ nhập từ một đường dẫn ở một nơi. ESLINT:

    const foo = 1;
    let bar = foo;
    
    bar = 9;
    
    console.log(foo, bar); // => 1, 9
    60

    // const and let only exist in the blocks they are defined in.
    {
      let a = 1;
      const b = 1;
      var c = 1;
    }
    console.log(a); // ReferenceError
    console.log(b); // ReferenceError
    console.log(c); // Prints 1
    8

⬆ Quay lại đầu

Tại sao? Có nhiều dòng nhập từ cùng một đường dẫn có thể làm cho mã khó duy trì hơn.

  • // const and let only exist in the blocks they are defined in.
    {
      let a = 1;
      const b = 1;
      var c = 1;
    }
    console.log(a); // ReferenceError
    console.log(b); // ReferenceError
    console.log(c); // Prints 1
    0

    // const and let only exist in the blocks they are defined in.
    {
      let a = 1;
      const b = 1;
      var c = 1;
    }
    console.log(a); // ReferenceError
    console.log(b); // ReferenceError
    console.log(c); // Prints 1
    9

  • 10.5 Không xuất khẩu ràng buộc đột biến. ESLINT:

    const foo = 1;
    let bar = foo;
    
    bar = 9;
    
    console.log(foo, bar); // => 1, 9
    61

    // bad
    const item = new Object();
    
    // good
    const item = {};
    0

  • Tại sao? Đột biến nên tránh nói chung, nhưng đặc biệt là khi xuất các ràng buộc có thể thay đổi. Mặc dù kỹ thuật này có thể cần thiết cho một số trường hợp đặc biệt, nói chung, chỉ nên xuất khẩu các tài liệu tham khảo không đổi.

    // bad
    const item = new Object();
    
    // good
    const item = {};
    1

⬆ Quay lại đầu

10.6 Trong các mô -đun với một lần xuất, thích xuất mặc định hơn xuất khẩu được đặt tên. ESLINT: const foo = 1; let bar = foo; bar = 9; console.log(foo, bar); // => 1, 962

  • Tại sao? Để khuyến khích nhiều tệp hơn mà chỉ xuất khẩu một thứ, tốt hơn cho khả năng đọc và khả năng bảo trì.

    // bad
    const item = new Object();
    
    // good
    const item = {};
    2

  • 10.7 Đặt tất cả các tuyên bố không phải là người không chú ý. ESLINT:

    const foo = 1;
    let bar = foo;
    
    bar = 9;
    
    console.log(foo, bar); // => 1, 9
    64

    Tại sao? Vì

    const foo = 1;
    let bar = foo;
    
    bar = 9;
    
    console.log(foo, bar); // => 1, 9
    58 được nâng lên, giữ tất cả chúng ở vị trí hàng đầu ngăn chặn hành vi đáng ngạc nhiên.

    // bad
    const item = new Object();
    
    // good
    const item = {};
    3

  • 10.8 Nhập khẩu đa dòng phải được thụt vào giống như mảng đa dòng và chữ cái. ESLINT:

    const foo = 1;
    let bar = foo;
    
    bar = 9;
    
    console.log(foo, bar); // => 1, 9
    66

    Tại sao? Điều này rất hữu ích khi sau này bạn có thể cần gán một biến tùy thuộc vào một trong các biến được chỉ định trước đó.

    // bad
    const item = new Object();
    
    // good
    const item = {};
    4

  • 13.4 Gán các biến trong đó bạn cần chúng, nhưng đặt chúng ở một nơi hợp lý.

    Tại sao?

    {
    "1": {
        "roundid": "1",
        "player": "name"
    },
    "2": {
        "roundid": "1",
        "player": "name"
    }
    
    65 và
    {
    "1": {
        "roundid": "1",
        "player": "name"
    },
    "2": {
        "roundid": "1",
        "player": "name"
    }
    
    61 là phạm vi khối và không có chức năng.

    // bad
    const item = new Object();
    
    // good
    const item = {};
    5

  • 13.5 Bài tập biến biến chuỗi. ESLINT:

    const foo = [1, 2];
    const bar = foo;
    
    bar[0] = 9;
    
    console.log(foo[0], bar[0]); // => 9, 9
    08

    Tại sao? Chuỗi các bài tập biến tạo ra các biến toàn cầu ngầm.

    // bad
    const item = new Object();
    
    // good
    const item = {};
    6

  • 13.6 Tránh sử dụng tăng và giảm đơn (

    const foo = [1, 2];
    const bar = foo;
    
    bar[0] = 9;
    
    console.log(foo[0], bar[0]); // => 9, 9
    09,
    const foo = [1, 2];
    const bar = foo;
    
    bar[0] = 9;
    
    console.log(foo[0], bar[0]); // => 9, 9
    10). ESLINT
    const foo = [1, 2];
    const bar = foo;
    
    bar[0] = 9;
    
    console.log(foo[0], bar[0]); // => 9, 9
    11

    Tại sao? Theo tài liệu ESLINT, các câu lệnh tăng và giảm không được chèn tự động và có thể gây ra các lỗi im lặng với các giá trị tăng hoặc giảm trong một ứng dụng. Nó cũng biểu cảm hơn để biến đổi các giá trị của bạn với các câu lệnh như

    const foo = [1, 2];
    const bar = foo;
    
    bar[0] = 9;
    
    console.log(foo[0], bar[0]); // => 9, 9
    12 thay vì
    const foo = [1, 2];
    const bar = foo;
    
    bar[0] = 9;
    
    console.log(foo[0], bar[0]); // => 9, 9
    13 hoặc
    const foo = [1, 2];
    const bar = foo;
    
    bar[0] = 9;
    
    console.log(foo[0], bar[0]); // => 9, 9
    14. Việc loại bỏ các tuyên bố tăng và giảm không cho bạn cũng ngăn bạn khỏi các giá trị trước/trước khi phân phối trước, điều này cũng có thể gây ra hành vi bất ngờ trong các chương trình của bạn.

    // bad
    const item = new Object();
    
    // good
    const item = {};
    7

  • 13.7 Tránh các dòng trước hoặc sau

    const foo = [1, 2];
    const bar = foo;
    
    bar[0] = 9;
    
    console.log(foo[0], bar[0]); // => 9, 9
    15 trong một bài tập. Nếu nhiệm vụ của bạn vi phạm
    const foo = [1, 2];
    const bar = foo;
    
    bar[0] = 9;
    
    console.log(foo[0], bar[0]); // => 9, 9
    16, hãy bao quanh giá trị trong parens. ESLINT
    const foo = [1, 2];
    const bar = foo;
    
    bar[0] = 9;
    
    console.log(foo[0], bar[0]); // => 9, 9
    17.

    Tại sao? LineBreaks xung quanh

    const foo = [1, 2];
    const bar = foo;
    
    bar[0] = 9;
    
    console.log(foo[0], bar[0]); // => 9, 9
    15 có thể làm xáo trộn giá trị của một nhiệm vụ.

    // bad
    const item = new Object();
    
    // good
    const item = {};
    8

  • 13.8 Không cho phép các biến không sử dụng. ESLINT:

    const foo = [1, 2];
    const bar = foo;
    
    bar[0] = 9;
    
    console.log(foo[0], bar[0]); // => 9, 9
    19

    Tại sao? Các biến được khai báo và không được sử dụng ở bất cứ đâu trong mã rất có thể là một lỗi do tái cấu trúc không hoàn chỉnh. Các biến như vậy chiếm không gian trong mã và có thể dẫn đến sự nhầm lẫn của độc giả.

    // bad
    const item = new Object();
    
    // good
    const item = {};
    9

⬆ Quay lại đầu

Kéo

  • 14.1

    {
    "1": {
        "roundid": "1",
        "player": "name"
    },
    "2": {
        "roundid": "1",
        "player": "name"
    }
    
    62 Tuyên bố được nâng lên trên đỉnh của phạm vi chức năng bao quanh gần nhất của chúng, nhiệm vụ của họ thì không.
    {
    "1": {
        "roundid": "1",
        "player": "name"
    },
    "2": {
        "roundid": "1",
        "player": "name"
    }
    
    61 và
    {
    "1": {
        "roundid": "1",
        "player": "name"
    },
    "2": {
        "roundid": "1",
        "player": "name"
    }
    
    65 Tuyên bố được ban phước với một khái niệm mới gọi là vùng chết tạm thời (TDZ). Nó rất quan trọng để biết tại sao typeof không còn an toàn.

    function getKey(k) {
      return `a key named ${k}`;
    }
    
    // bad
    const obj = {
      id: 5,
      name: 'San Francisco',
    };
    obj[getKey('enabled')] = true;
    
    // good
    const obj = {
      id: 5,
      name: 'San Francisco',
      [getKey('enabled')]: true,
    };
    0

  • 14.2 Biểu thức chức năng ẩn danh nâng tên biến của họ, nhưng không phải là gán chức năng.

    function getKey(k) {
      return `a key named ${k}`;
    }
    
    // bad
    const obj = {
      id: 5,
      name: 'San Francisco',
    };
    obj[getKey('enabled')] = true;
    
    // good
    const obj = {
      id: 5,
      name: 'San Francisco',
      [getKey('enabled')]: true,
    };
    1

  • 14.3 Biểu thức chức năng được đặt tên nâng tên biến, không phải tên hàm hoặc cơ thể hàm.

    function getKey(k) {
      return `a key named ${k}`;
    }
    
    // bad
    const obj = {
      id: 5,
      name: 'San Francisco',
    };
    obj[getKey('enabled')] = true;
    
    // good
    const obj = {
      id: 5,
      name: 'San Francisco',
      [getKey('enabled')]: true,
    };
    2

  • 14.4 Tuyên bố chức năng Tăng tên của họ và cơ thể chức năng.

    function getKey(k) {
      return `a key named ${k}`;
    }
    
    // bad
    const obj = {
      id: 5,
      name: 'San Francisco',
    };
    obj[getKey('enabled')] = true;
    
    // good
    const obj = {
      id: 5,
      name: 'San Francisco',
      [getKey('enabled')]: true,
    };
    3

  • Để biết thêm thông tin, hãy tham khảo phạm vi JavaScript & Hoisting của Ben Cherry.

⬆ Quay lại đầu

Kéo

  • 14.1
    {
    "1": {
        "roundid": "1",
        "player": "name"
    },
    "2": {
        "roundid": "1",
        "player": "name"
    }
    
    62 Tuyên bố được nâng lên trên đỉnh của phạm vi chức năng bao quanh gần nhất của chúng, nhiệm vụ của họ thì không.
    {
    "1": {
        "roundid": "1",
        "player": "name"
    },
    "2": {
        "roundid": "1",
        "player": "name"
    }
    
    61 và
    {
    "1": {
        "roundid": "1",
        "player": "name"
    },
    "2": {
        "roundid": "1",
        "player": "name"
    }
    
    65 Tuyên bố được ban phước với một khái niệm mới gọi là vùng chết tạm thời (TDZ). Nó rất quan trọng để biết tại sao typeof không còn an toàn.
  • 14.2 Biểu thức chức năng ẩn danh nâng tên biến của họ, nhưng không phải là gán chức năng.

    • 14.3 Biểu thức chức năng được đặt tên nâng tên biến, không phải tên hàm hoặc cơ thể hàm. evaluate to true
    • 14.4 Tuyên bố chức năng Tăng tên của họ và cơ thể chức năng. evaluates to false
    • Để biết thêm thông tin, hãy tham khảo phạm vi JavaScript & Hoisting của Ben Cherry. evaluates to false
    • Các nhà khai thác và bình đẳng so sánh evaluate to the value of the boolean
    • 15.1 Sử dụng
      const foo = [1, 2];
      const bar = foo;
      
      bar[0] = 9;
      
      console.log(foo[0], bar[0]); // => 9, 9
      23 và
      const foo = [1, 2];
      const bar = foo;
      
      bar[0] = 9;
      
      console.log(foo[0], bar[0]); // => 9, 9
      24 trên
      const foo = [1, 2];
      const bar = foo;
      
      bar[0] = 9;
      
      console.log(foo[0], bar[0]); // => 9, 9
      25 và
      const foo = [1, 2];
      const bar = foo;
      
      bar[0] = 9;
      
      console.log(foo[0], bar[0]); // => 9, 9
      26. ESLINT:
      const foo = [1, 2];
      const bar = foo;
      
      bar[0] = 9;
      
      console.log(foo[0], bar[0]); // => 9, 9
      27
      evaluate to false if +0, -0, or NaN, otherwise true
    • 15.2 Các câu lệnh có điều kiện như tuyên bố
      const foo = 1;
      let bar = foo;
      
      bar = 9;
      
      console.log(foo, bar); // => 1, 9
      11 Đánh giá biểu thức của họ bằng cách sử dụng sự ép buộc với phương pháp trừu tượng
      const foo = [1, 2];
      const bar = foo;
      
      bar[0] = 9;
      
      console.log(foo[0], bar[0]); // => 9, 9
      29 và luôn tuân theo các quy tắc đơn giản sau:
      evaluate to false if an empty string
      const foo = 1;
      let bar = foo;
      
      bar = 9;
      
      console.log(foo, bar); // => 1, 9
      02, otherwise true

    function getKey(k) {
      return `a key named ${k}`;
    }
    
    // bad
    const obj = {
      id: 5,
      name: 'San Francisco',
    };
    obj[getKey('enabled')] = true;
    
    // good
    const obj = {
      id: 5,
      name: 'San Francisco',
      [getKey('enabled')]: true,
    };
    4

  • Các đối tượng đánh giá đúng

    function getKey(k) {
      return `a key named ${k}`;
    }
    
    // bad
    const obj = {
      id: 5,
      name: 'San Francisco',
    };
    obj[getKey('enabled')] = true;
    
    // good
    const obj = {
      id: 5,
      name: 'San Francisco',
      [getKey('enabled')]: true,
    };
    5

  • Đánh giá không xác định là sai
  • Null đánh giá là sai

    Booleans đánh giá theo giá trị của boolean

    function getKey(k) {
      return `a key named ${k}`;
    }
    
    // bad
    const obj = {
      id: 5,
      name: 'San Francisco',
    };
    obj[getKey('enabled')] = true;
    
    // good
    const obj = {
      id: 5,
      name: 'San Francisco',
      [getKey('enabled')]: true,
    };
    6

  • Các số đánh giá là sai if +0, -0 hoặc nan, nếu không thì đúng

    function getKey(k) {
      return `a key named ${k}`;
    }
    
    // bad
    const obj = {
      id: 5,
      name: 'San Francisco',
    };
    obj[getKey('enabled')] = true;
    
    // good
    const obj = {
      id: 5,
      name: 'San Francisco',
      [getKey('enabled')]: true,
    };
    7

  • Chuỗi đánh giá sai nếu một chuỗi trống

    const foo = 1;
    let bar = foo;
    
    bar = 9;
    
    console.log(foo, bar); // => 1, 9
    02, nếu không đúng

    function getKey(k) {
      return `a key named ${k}`;
    }
    
    // bad
    const obj = {
      id: 5,
      name: 'San Francisco',
    };
    obj[getKey('enabled')] = true;
    
    // good
    const obj = {
      id: 5,
      name: 'San Francisco',
      [getKey('enabled')]: true,
    };
    8

  • 15.3 Sử dụng các phím tắt cho Booleans, nhưng so sánh rõ ràng cho các chuỗi và số.

    15.4 Để biết thêm thông tin, hãy xem sự thật bình đẳng và JavaScript của Angus Croll.

    function getKey(k) {
      return `a key named ${k}`;
    }
    
    // bad
    const obj = {
      id: 5,
      name: 'San Francisco',
    };
    obj[getKey('enabled')] = true;
    
    // good
    const obj = {
      id: 5,
      name: 'San Francisco',
      [getKey('enabled')]: true,
    };
    9

⬆ Quay lại đầu

Kéo

  • 14.1

    {
    "1": {
        "roundid": "1",
        "player": "name"
    },
    "2": {
        "roundid": "1",
        "player": "name"
    }
    
    62 Tuyên bố được nâng lên trên đỉnh của phạm vi chức năng bao quanh gần nhất của chúng, nhiệm vụ của họ thì không.
    {
    "1": {
        "roundid": "1",
        "player": "name"
    },
    "2": {
        "roundid": "1",
        "player": "name"
    }
    
    61 và
    {
    "1": {
        "roundid": "1",
        "player": "name"
    },
    "2": {
        "roundid": "1",
        "player": "name"
    }
    
    65 Tuyên bố được ban phước với một khái niệm mới gọi là vùng chết tạm thời (TDZ). Nó rất quan trọng để biết tại sao typeof không còn an toàn.

    // bad
    const atom = {
      value: 1,
    
      addValue: function (value) {
        return atom.value + value;
      },
    };
    
    // good
    const atom = {
      value: 1,
    
      addValue(value) {
        return atom.value + value;
      },
    };
    0

  • 14.2 Biểu thức chức năng ẩn danh nâng tên biến của họ, nhưng không phải là gán chức năng.

    // bad
    const atom = {
      value: 1,
    
      addValue: function (value) {
        return atom.value + value;
      },
    };
    
    // good
    const atom = {
      value: 1,
    
      addValue(value) {
        return atom.value + value;
      },
    };
    1

  • 14.3 Biểu thức chức năng được đặt tên nâng tên biến, không phải tên hàm hoặc cơ thể hàm.

    // bad
    const atom = {
      value: 1,
    
      addValue: function (value) {
        return atom.value + value;
      },
    };
    
    // good
    const atom = {
      value: 1,
    
      addValue(value) {
        return atom.value + value;
      },
    };
    2

⬆ Quay lại đầu

Kiểm soát tuyên bố

  • 17.1 Trong trường hợp tuyên bố kiểm soát của bạn (

    const foo = 1;
    let bar = foo;
    
    bar = 9;
    
    console.log(foo, bar); // => 1, 9
    11,
    const foo = 1;
    let bar = foo;
    
    bar = 9;
    
    console.log(foo, bar); // => 1, 9
    12, v.v.) quá dài hoặc vượt quá độ dài dòng tối đa, mỗi điều kiện (được nhóm) có thể được đưa vào một dòng mới. Toán tử logic nên bắt đầu dòng.

    Tại sao? Yêu cầu các toán tử ở đầu dòng giữ cho các toán tử được căn chỉnh và tuân theo một mẫu tương tự như chuỗi phương pháp. Điều này cũng cải thiện khả năng đọc bằng cách làm cho nó dễ dàng hơn để tuân theo logic phức tạp.

    // bad
    const atom = {
      value: 1,
    
      addValue: function (value) {
        return atom.value + value;
      },
    };
    
    // good
    const atom = {
      value: 1,
    
      addValue(value) {
        return atom.value + value;
      },
    };
    3

  • 17.2 Không sử dụng các toán tử lựa chọn thay cho các câu lệnh kiểm soát.

    // bad
    const atom = {
      value: 1,
    
      addValue: function (value) {
        return atom.value + value;
      },
    };
    
    // good
    const atom = {
      value: 1,
    
      addValue(value) {
        return atom.value + value;
      },
    };
    4

⬆ Quay lại đầu

Bình luận

  • 18.1 Sử dụng

    const foo = [1, 2];
    const bar = foo;
    
    bar[0] = 9;
    
    console.log(foo[0], bar[0]); // => 9, 9
    66 cho các bình luận đa dòng.

    // bad
    const atom = {
      value: 1,
    
      addValue: function (value) {
        return atom.value + value;
      },
    };
    
    // good
    const atom = {
      value: 1,
    
      addValue(value) {
        return atom.value + value;
      },
    };
    5

  • 18.2 Sử dụng

    const foo = [1, 2];
    const bar = foo;
    
    bar[0] = 9;
    
    console.log(foo[0], bar[0]); // => 9, 9
    67 cho các bình luận dòng đơn. Đặt ý kiến ​​dòng đơn trên một dòng mới trên chủ đề của bình luận. Đặt một dòng trống trước bình luận trừ khi nó trên dòng đầu tiên của một khối.

    // bad
    const atom = {
      value: 1,
    
      addValue: function (value) {
        return atom.value + value;
      },
    };
    
    // good
    const atom = {
      value: 1,
    
      addValue(value) {
        return atom.value + value;
      },
    };
    6

  • 18.3 Bắt đầu tất cả các bình luận với một không gian để dễ đọc hơn. ESLINT:

    const foo = [1, 2];
    const bar = foo;
    
    bar[0] = 9;
    
    console.log(foo[0], bar[0]); // => 9, 9
    68

    // bad
    const atom = {
      value: 1,
    
      addValue: function (value) {
        return atom.value + value;
      },
    };
    
    // good
    const atom = {
      value: 1,
    
      addValue(value) {
        return atom.value + value;
      },
    };
    7

  • 18.4 Tiền tố nhận xét của bạn với
    const foo = [1, 2];
    const bar = foo;
    
    bar[0] = 9;
    
    console.log(foo[0], bar[0]); // => 9, 9
    69 hoặc
    const foo = [1, 2];
    const bar = foo;
    
    bar[0] = 9;
    
    console.log(foo[0], bar[0]); // => 9, 9
    70 giúp các nhà phát triển khác nhanh chóng hiểu nếu bạn chỉ ra một vấn đề cần được xem xét lại, hoặc nếu bạn đề xuất một giải pháp cho vấn đề cần được thực hiện. Đây là khác nhau so với bình luận thường xuyên vì chúng có thể hành động. Các hành động là
    const foo = [1, 2];
    const bar = foo;
    
    bar[0] = 9;
    
    console.log(foo[0], bar[0]); // => 9, 9
    71 hoặc
    const foo = [1, 2];
    const bar = foo;
    
    bar[0] = 9;
    
    console.log(foo[0], bar[0]); // => 9, 9
    72.
  • 18,5 Sử dụng

    const foo = [1, 2];
    const bar = foo;
    
    bar[0] = 9;
    
    console.log(foo[0], bar[0]); // => 9, 9
    73 để chú thích các vấn đề.

    // bad
    const atom = {
      value: 1,
    
      addValue: function (value) {
        return atom.value + value;
      },
    };
    
    // good
    const atom = {
      value: 1,
    
      addValue(value) {
        return atom.value + value;
      },
    };
    8

  • 18.6 Sử dụng

    const foo = [1, 2];
    const bar = foo;
    
    bar[0] = 9;
    
    console.log(foo[0], bar[0]); // => 9, 9
    74 để chú thích các giải pháp cho các vấn đề.

    // bad
    const atom = {
      value: 1,
    
      addValue: function (value) {
        return atom.value + value;
      },
    };
    
    // good
    const atom = {
      value: 1,
    
      addValue(value) {
        return atom.value + value;
      },
    };
    9

⬆ Quay lại đầu

Khoảng trắng

  • 19.1 Sử dụng các tab mềm (ký tự không gian) đặt thành 2 khoảng trắng. ESLINT:

    const foo = [1, 2];
    const bar = foo;
    
    bar[0] = 9;
    
    console.log(foo[0], bar[0]); // => 9, 9
    75

    {
    "1": {
        "roundid": "1",
        "player": "name"
    },
    "2": {
        "roundid": "1",
        "player": "name"
    }
    
    00

  • 19.2 Đặt 1 không gian trước khi nẹp hàng đầu. ESLINT:

    const foo = 1;
    let bar = foo;
    
    bar = 9;
    
    console.log(foo, bar); // => 1, 9
    26

    {
    "1": {
        "roundid": "1",
        "player": "name"
    },
    "2": {
        "roundid": "1",
        "player": "name"
    }
    
    01

  • 19.3 Đặt 1 không gian trước dấu ngoặc đơn mở trong các câu lệnh kiểm soát (

    const foo = 1;
    let bar = foo;
    
    bar = 9;
    
    console.log(foo, bar); // => 1, 9
    11,
    const foo = 1;
    let bar = foo;
    
    bar = 9;
    
    console.log(foo, bar); // => 1, 9
    12, v.v.). Không có khoảng trống giữa danh sách đối số và tên hàm trong các cuộc gọi và khai báo chức năng. ESLINT:
    const foo = [1, 2];
    const bar = foo;
    
    bar[0] = 9;
    
    console.log(foo[0], bar[0]); // => 9, 9
    79

    {
    "1": {
        "roundid": "1",
        "player": "name"
    },
    "2": {
        "roundid": "1",
        "player": "name"
    }
    
    02

  • 19.4 Đặt ra các toán tử với không gian. ESLINT:

    const foo = [1, 2];
    const bar = foo;
    
    bar[0] = 9;
    
    console.log(foo[0], bar[0]); // => 9, 9
    80

    {
    "1": {
        "roundid": "1",
        "player": "name"
    },
    "2": {
        "roundid": "1",
        "player": "name"
    }
    
    03

  • 19.5 Tệp kết thúc với một ký tự dòng duy nhất. ESLINT:

    const foo = [1, 2];
    const bar = foo;
    
    bar[0] = 9;
    
    console.log(foo[0], bar[0]); // => 9, 9
    81

    {
    "1": {
        "roundid": "1",
        "player": "name"
    },
    "2": {
        "roundid": "1",
        "player": "name"
    }
    
    04

    {
    "1": {
        "roundid": "1",
        "player": "name"
    },
    "2": {
        "roundid": "1",
        "player": "name"
    }
    
    05

    {
    "1": {
        "roundid": "1",
        "player": "name"
    },
    "2": {
        "roundid": "1",
        "player": "name"
    }
    
    06

  • 19.6 Sử dụng thụt vào khi tạo chuỗi phương pháp dài (hơn 2 chuỗi phương pháp). Sử dụng một dấu chấm hàng đầu, trong đó nhấn mạnh rằng dòng là một cuộc gọi phương thức, không phải là một tuyên bố mới. ESLint:

    const foo = [1, 2];
    const bar = foo;
    
    bar[0] = 9;
    
    console.log(foo[0], bar[0]); // => 9, 9
    82
    const foo = [1, 2];
    const bar = foo;
    
    bar[0] = 9;
    
    console.log(foo[0], bar[0]); // => 9, 9
    83

    {
    "1": {
        "roundid": "1",
        "player": "name"
    },
    "2": {
        "roundid": "1",
        "player": "name"
    }
    
    07

  • 19.7 Để lại một dòng trống sau các khối và trước câu lệnh tiếp theo.

    {
    "1": {
        "roundid": "1",
        "player": "name"
    },
    "2": {
        "roundid": "1",
        "player": "name"
    }
    
    08

  • 19.8 Không đệm các khối của bạn bằng các đường trống. ESLINT:

    const foo = [1, 2];
    const bar = foo;
    
    bar[0] = 9;
    
    console.log(foo[0], bar[0]); // => 9, 9
    84

    {
    "1": {
        "roundid": "1",
        "player": "name"
    },
    "2": {
        "roundid": "1",
        "player": "name"
    }
    
    09

  • 19.9 Không sử dụng nhiều dòng trống để đệm mã của bạn. ESLINT:

    const foo = [1, 2];
    const bar = foo;
    
    bar[0] = 9;
    
    console.log(foo[0], bar[0]); // => 9, 9
    85

    {
    "1": {
        "roundid": "1",
        "player": "name"
    },
    "2": {
        "roundid": "1",
        "player": "name"
    }
    
    10

  • 19.10 Không thêm khoảng trống bên trong dấu ngoặc đơn. ESLINT:

    const foo = [1, 2];
    const bar = foo;
    
    bar[0] = 9;
    
    console.log(foo[0], bar[0]); // => 9, 9
    86

    {
    "1": {
        "roundid": "1",
        "player": "name"
    },
    "2": {
        "roundid": "1",
        "player": "name"
    }
    
    11

  • 19.11 Không thêm khoảng trống bên trong ngoặc. ESLINT:

    const foo = [1, 2];
    const bar = foo;
    
    bar[0] = 9;
    
    console.log(foo[0], bar[0]); // => 9, 9
    87

    {
    "1": {
        "roundid": "1",
        "player": "name"
    },
    "2": {
        "roundid": "1",
        "player": "name"
    }
    
    12

  • 19.12 Thêm khoảng trống bên trong niềng răng xoăn. ESLINT:

    const foo = [1, 2];
    const bar = foo;
    
    bar[0] = 9;
    
    console.log(foo[0], bar[0]); // => 9, 9
    88

    {
    "1": {
        "roundid": "1",
        "player": "name"
    },
    "2": {
        "roundid": "1",
        "player": "name"
    }
    
    13

  • 19.13 Tránh có các dòng mã dài hơn 100 ký tự (bao gồm cả khoảng trắng). LƯU Ý: Theo trên, các chuỗi dài được miễn trừ khỏi quy tắc này và không nên bị phá vỡ. ESLINT:

    const foo = [1, 2];
    const bar = foo;
    
    bar[0] = 9;
    
    console.log(foo[0], bar[0]); // => 9, 9
    16

    Tại sao? Điều này đảm bảo khả năng đọc và khả năng bảo trì.

    {
    "1": {
        "roundid": "1",
        "player": "name"
    },
    "2": {
        "roundid": "1",
        "player": "name"
    }
    
    14

  • 19.14 Yêu cầu khoảng cách nhất quán bên trong mã thông báo khối mở và mã thông báo tiếp theo trên cùng một dòng. Quy tắc này cũng thực thi khoảng cách nhất quán bên trong một mã thông báo khối gần và mã thông báo trước đó trên cùng một dòng. ESLINT:

    const foo = [1, 2];
    const bar = foo;
    
    bar[0] = 9;
    
    console.log(foo[0], bar[0]); // => 9, 9
    90

    {
    "1": {
        "roundid": "1",
        "player": "name"
    },
    "2": {
        "roundid": "1",
        "player": "name"
    }
    
    15

  • 19.15 Tránh không gian trước dấu phẩy và yêu cầu một không gian sau dấu phẩy. ESLINT:

    const foo = [1, 2];
    const bar = foo;
    
    bar[0] = 9;
    
    console.log(foo[0], bar[0]); // => 9, 9
    91

    {
    "1": {
        "roundid": "1",
        "player": "name"
    },
    "2": {
        "roundid": "1",
        "player": "name"
    }
    
    16

  • 19.16 Thực thi khoảng cách bên trong các giá đỡ tài sản được tính toán. ESLINT:

    const foo = [1, 2];
    const bar = foo;
    
    bar[0] = 9;
    
    console.log(foo[0], bar[0]); // => 9, 9
    92

    {
    "1": {
        "roundid": "1",
        "player": "name"
    },
    "2": {
        "roundid": "1",
        "player": "name"
    }
    
    17

  • 19,17 Tránh không gian giữa các chức năng và các yêu cầu của chúng. ESLINT:

    const foo = [1, 2];
    const bar = foo;
    
    bar[0] = 9;
    
    console.log(foo[0], bar[0]); // => 9, 9
    93

    {
    "1": {
        "roundid": "1",
        "player": "name"
    },
    "2": {
        "roundid": "1",
        "player": "name"
    }
    
    18

  • 19,18 Thực thi khoảng cách giữa các khóa và giá trị trong các thuộc tính theo nghĩa đen của đối tượng. ESLINT:

    const foo = [1, 2];
    const bar = foo;
    
    bar[0] = 9;
    
    console.log(foo[0], bar[0]); // => 9, 9
    94

    {
    "1": {
        "roundid": "1",
        "player": "name"
    },
    "2": {
        "roundid": "1",
        "player": "name"
    }
    
    19

  • 19.19 Tránh các không gian kéo dài ở cuối dòng. ESLINT:
    const foo = [1, 2];
    const bar = foo;
    
    bar[0] = 9;
    
    console.log(foo[0], bar[0]); // => 9, 9
    95
  • 19.20 Tránh nhiều dòng trống, chỉ cho phép một dòng mới ở cuối tệp và tránh một dòng mới ở đầu các tệp. ESLINT:

    const foo = [1, 2];
    const bar = foo;
    
    bar[0] = 9;
    
    console.log(foo[0], bar[0]); // => 9, 9
    85

    {
    "1": {
        "roundid": "1",
        "player": "name"
    },
    "2": {
        "roundid": "1",
        "player": "name"
    }
    
    20

⬆ Quay lại đầu

Dấu phẩy

  • 20.1 Dấu phẩy hàng đầu: Không. ESLINT:

    const foo = [1, 2];
    const bar = foo;
    
    bar[0] = 9;
    
    console.log(foo[0], bar[0]); // => 9, 9
    97Nope. eslint:
    const foo = [1, 2];
    const bar = foo;
    
    bar[0] = 9;
    
    console.log(foo[0], bar[0]); // => 9, 9
    97

    {
    "1": {
        "roundid": "1",
        "player": "name"
    },
    "2": {
        "roundid": "1",
        "player": "name"
    }
    
    21

  • 20.2 Bổ sung dấu phẩy: Yup. ESLINT:

    const foo = [1, 2];
    const bar = foo;
    
    bar[0] = 9;
    
    console.log(foo[0], bar[0]); // => 9, 9
    98Yup. eslint:
    const foo = [1, 2];
    const bar = foo;
    
    bar[0] = 9;
    
    console.log(foo[0], bar[0]); // => 9, 9
    98

    Tại sao? Điều này dẫn đến Git Cleaner Diffs. Ngoài ra, những người chuyển đổi như Babel sẽ loại bỏ dấu phẩy kéo dài trong mã được chuyển đổi, điều đó có nghĩa là bạn không phải lo lắng về vấn đề dấu phẩy kéo dài trong các trình duyệt kế thừa.

    {
    "1": {
        "roundid": "1",
        "player": "name"
    },
    "2": {
        "roundid": "1",
        "player": "name"
    }
    
    22

    {
    "1": {
        "roundid": "1",
        "player": "name"
    },
    "2": {
        "roundid": "1",
        "player": "name"
    }
    
    23

⬆ Quay lại đầu

Dấu chấm phẩy

  • 21,1 yup. ESLINT:

    const foo = [1, 2];
    const bar = foo;
    
    bar[0] = 9;
    
    console.log(foo[0], bar[0]); // => 9, 9
    99Yup. eslint:
    const foo = [1, 2];
    const bar = foo;
    
    bar[0] = 9;
    
    console.log(foo[0], bar[0]); // => 9, 9
    99

    Tại sao? Khi JavaScript gặp phải một dòng phá vỡ mà không có dấu chấm phẩy, nó sử dụng một tập hợp các quy tắc gọi là chèn dấu chấm phẩy tự động để xác định xem nó có nên liên quan đến dòng đó là kết thúc của một câu lệnh hay không và (như tên ngụ ý) đặt một dấu chấm phẩy vào mã của bạn trước đó Các dòng phá vỡ nếu nó nghĩ như vậy. Tuy nhiên, ASI chứa một vài hành vi lập dị, và mã của bạn sẽ bị phá vỡ nếu JavaScript giải thích sai dòng của bạn. Các quy tắc này sẽ trở nên phức tạp hơn khi các tính năng mới trở thành một phần của JavaScript. Việc chấm dứt rõ ràng các tuyên bố của bạn và định cấu hình linter của bạn để bắt các dấu chấm phẩy bị thiếu sẽ giúp ngăn bạn gặp sự cố.

    {
    "1": {
        "roundid": "1",
        "player": "name"
    },
    "2": {
        "roundid": "1",
        "player": "name"
    }
    
    24

    Đọc thêm.

⬆ Quay lại đầu

Nhập đúc & ép buộc

  • 22.1 Thực hiện ép buộc loại khi bắt đầu tuyên bố.
  • 22.2 Chuỗi: ESLINT:

    // bad
    var a = 1;
    var b = 2;
    
    // good
    const a = 1;
    const b = 2;
    00

    {
    "1": {
        "roundid": "1",
        "player": "name"
    },
    "2": {
        "roundid": "1",
        "player": "name"
    }
    
    25

  • 22.3 Số: Sử dụng

    // bad
    var a = 1;
    var b = 2;
    
    // good
    const a = 1;
    const b = 2;
    01 cho loại đúc và
    // bad
    var a = 1;
    var b = 2;
    
    // good
    const a = 1;
    const b = 2;
    02 luôn có radix cho các chuỗi phân tích cú pháp. ESLint:
    // bad
    var a = 1;
    var b = 2;
    
    // good
    const a = 1;
    const b = 2;
    03
    // bad
    var a = 1;
    var b = 2;
    
    // good
    const a = 1;
    const b = 2;
    00

    Tại sao? Hàm

    // bad
    var a = 1;
    var b = 2;
    
    // good
    const a = 1;
    const b = 2;
    02 tạo ra giá trị số nguyên được quyết định bằng cách giải thích nội dung của đối số chuỗi theo radix được chỉ định. Khoảng trắng hàng đầu trong chuỗi bị bỏ qua. Nếu radix là
    {
    "1": {
        "roundid": "1",
        "player": "name"
    },
    "2": {
        "roundid": "1",
        "player": "name"
    }
    
    55 hoặc
    // bad
    var a = 1;
    var b = 2;
    
    // good
    const a = 1;
    const b = 2;
    07, thì nó được cho là
    // bad
    var a = 1;
    var b = 2;
    
    // good
    const a = 1;
    const b = 2;
    08 trừ khi số bắt đầu với các cặp ký tự
    // bad
    var a = 1;
    var b = 2;
    
    // good
    const a = 1;
    const b = 2;
    09 hoặc
    // bad
    var a = 1;
    var b = 2;
    
    // good
    const a = 1;
    const b = 2;
    10, trong trường hợp đó, Radix là 16 được giả định. Điều này khác với Ecmascript 3, chỉ đơn thuần là không khuyến khích (nhưng cho phép) diễn giải octal. Nhiều triển khai đã không áp dụng hành vi này vào năm 2013. Và, vì các trình duyệt cũ hơn phải được hỗ trợ, luôn chỉ định một radix.

    {
    "1": {
        "roundid": "1",
        "player": "name"
    },
    "2": {
        "roundid": "1",
        "player": "name"
    }
    
    26

  • 22.4 Nếu vì bất kỳ lý do gì bạn đang làm điều gì đó hoang dã và

    // bad
    var a = 1;
    var b = 2;
    
    // good
    const a = 1;
    const b = 2;
    02 là nút cổ chai của bạn và cần sử dụng Bitshift vì lý do hiệu suất, hãy để lại nhận xét giải thích lý do tại sao và những gì bạn làm.

    {
    "1": {
        "roundid": "1",
        "player": "name"
    },
    "2": {
        "roundid": "1",
        "player": "name"
    }
    
    27

  • 22,5 Lưu ý: Hãy cẩn thận khi sử dụng các hoạt động Bitshift. Các số được biểu diễn dưới dạng giá trị 64 bit, nhưng các hoạt động BitShift luôn trả về một số nguyên 32 bit (nguồn). Bitshift có thể dẫn đến hành vi bất ngờ đối với các giá trị số nguyên lớn hơn 32 bit. Thảo luận. Lớn nhất đã ký 32 bit INT là 2.147.483.647:Note: Be careful when using bitshift operations. Numbers are represented as 64-bit values, but bitshift operations always return a 32-bit integer (source). Bitshift can lead to unexpected behavior for integer values larger than 32 bits. Discussion. Largest signed 32-bit Int is 2,147,483,647:

    {
    "1": {
        "roundid": "1",
        "player": "name"
    },
    "2": {
        "roundid": "1",
        "player": "name"
    }
    
    28

  • 22.6 Booleans: Eslint:

    // bad
    var a = 1;
    var b = 2;
    
    // good
    const a = 1;
    const b = 2;
    00

    {
    "1": {
        "roundid": "1",
        "player": "name"
    },
    "2": {
        "roundid": "1",
        "player": "name"
    }
    
    29

⬆ Quay lại đầu

Nhập đúc & ép buộc

  • 22.1 Thực hiện ép buộc loại khi bắt đầu tuyên bố.

    {
    "1": {
        "roundid": "1",
        "player": "name"
    },
    "2": {
        "roundid": "1",
        "player": "name"
    }
    
    30

  • 22.2 Chuỗi: ESLINT:

    // bad
    var a = 1;
    var b = 2;
    
    // good
    const a = 1;
    const b = 2;
    00

    {
    "1": {
        "roundid": "1",
        "player": "name"
    },
    "2": {
        "roundid": "1",
        "player": "name"
    }
    
    31

  • 22.3 Số: Sử dụng

    // bad
    var a = 1;
    var b = 2;
    
    // good
    const a = 1;
    const b = 2;
    01 cho loại đúc và
    // bad
    var a = 1;
    var b = 2;
    
    // good
    const a = 1;
    const b = 2;
    02 luôn có radix cho các chuỗi phân tích cú pháp. ESLint:
    // bad
    var a = 1;
    var b = 2;
    
    // good
    const a = 1;
    const b = 2;
    03
    // bad
    var a = 1;
    var b = 2;
    
    // good
    const a = 1;
    const b = 2;
    00

    {
    "1": {
        "roundid": "1",
        "player": "name"
    },
    "2": {
        "roundid": "1",
        "player": "name"
    }
    
    32

  • Tại sao? Hàm

    // bad
    var a = 1;
    var b = 2;
    
    // good
    const a = 1;
    const b = 2;
    02 tạo ra giá trị số nguyên được quyết định bằng cách giải thích nội dung của đối số chuỗi theo radix được chỉ định. Khoảng trắng hàng đầu trong chuỗi bị bỏ qua. Nếu radix là
    {
    "1": {
        "roundid": "1",
        "player": "name"
    },
    "2": {
        "roundid": "1",
        "player": "name"
    }
    
    55 hoặc
    // bad
    var a = 1;
    var b = 2;
    
    // good
    const a = 1;
    const b = 2;
    07, thì nó được cho là
    // bad
    var a = 1;
    var b = 2;
    
    // good
    const a = 1;
    const b = 2;
    08 trừ khi số bắt đầu với các cặp ký tự
    // bad
    var a = 1;
    var b = 2;
    
    // good
    const a = 1;
    const b = 2;
    09 hoặc
    // bad
    var a = 1;
    var b = 2;
    
    // good
    const a = 1;
    const b = 2;
    10, trong trường hợp đó, Radix là 16 được giả định. Điều này khác với Ecmascript 3, chỉ đơn thuần là không khuyến khích (nhưng cho phép) diễn giải octal. Nhiều triển khai đã không áp dụng hành vi này vào năm 2013. Và, vì các trình duyệt cũ hơn phải được hỗ trợ, luôn chỉ định một radix.

    22.4 Nếu vì bất kỳ lý do gì bạn đang làm điều gì đó hoang dã và

    // bad
    var a = 1;
    var b = 2;
    
    // good
    const a = 1;
    const b = 2;
    02 là nút cổ chai của bạn và cần sử dụng Bitshift vì lý do hiệu suất, hãy để lại nhận xét giải thích lý do tại sao và những gì bạn làm.

    {
    "1": {
        "roundid": "1",
        "player": "name"
    },
    "2": {
        "roundid": "1",
        "player": "name"
    }
    
    33

  • 22,5 Lưu ý: Hãy cẩn thận khi sử dụng các hoạt động Bitshift. Các số được biểu diễn dưới dạng giá trị 64 bit, nhưng các hoạt động BitShift luôn trả về một số nguyên 32 bit (nguồn). Bitshift có thể dẫn đến hành vi bất ngờ đối với các giá trị số nguyên lớn hơn 32 bit. Thảo luận. Lớn nhất đã ký 32 bit INT là 2.147.483.647:

    {
    "1": {
        "roundid": "1",
        "player": "name"
    },
    "2": {
        "roundid": "1",
        "player": "name"
    }
    
    34

  • 22.6 Booleans: Eslint:

    // bad
    var a = 1;
    var b = 2;
    
    // good
    const a = 1;
    const b = 2;
    00

    {
    "1": {
        "roundid": "1",
        "player": "name"
    },
    "2": {
        "roundid": "1",
        "player": "name"
    }
    
    35

  • Đặt tên quy ước

    {
    "1": {
        "roundid": "1",
        "player": "name"
    },
    "2": {
        "roundid": "1",
        "player": "name"
    }
    
    36

  • 23.1 Tránh tên chữ cái đơn. Được mô tả với việc đặt tên của bạn. ESLINT:

    // bad
    var a = 1;
    var b = 2;
    
    // good
    const a = 1;
    const b = 2;
    13

    {
    "1": {
        "roundid": "1",
        "player": "name"
    },
    "2": {
        "roundid": "1",
        "player": "name"
    }
    
    37

  • 23.2 Sử dụng Camelcase khi đặt tên đối tượng, chức năng và phiên bản. ESLINT:

    // bad
    var a = 1;
    var b = 2;
    
    // good
    const a = 1;
    const b = 2;
    14

    23.3 Chỉ sử dụng pascalcase khi đặt tên cho các hàm tạo hoặc lớp. ESLINT:

    // bad
    var a = 1;
    var b = 2;
    
    // good
    const a = 1;
    const b = 2;
    15

    {
    "1": {
        "roundid": "1",
        "player": "name"
    },
    "2": {
        "roundid": "1",
        "player": "name"
    }
    
    38

  • 23.4 Không sử dụng dấu gạch dưới hoặc dẫn đầu. ESLINT:

    // bad
    var a = 1;
    var b = 2;
    
    // good
    const a = 1;
    const b = 2;
    16

    Tại sao? JavaScript không có khái niệm về quyền riêng tư về các thuộc tính hoặc phương thức. Mặc dù một dấu gạch dưới hàng đầu là một quy ước phổ biến có nghĩa là riêng tư, nhưng trên thực tế, các tài sản này hoàn toàn công khai và như vậy, là một phần của hợp đồng API công khai của bạn. Công ước này có thể khiến các nhà phát triển nghĩ sai rằng một sự thay đổi đã giành được tính toán là phá vỡ, hoặc các thử nghiệm đó không cần thiết. TL; DR: Nếu bạn muốn một cái gì đó trở thành riêng tư, thì nó không thể có mặt một cách quan sát.

    • 23.5 Don Tiết lưu tài liệu tham khảo đến
      const foo = 1;
      let bar = foo;
      
      bar = 9;
      
      console.log(foo, bar); // => 1, 9
      37. Sử dụng các hàm mũi tên hoặc chức năng#BIND.
    • 23.6 Một tên tệp cơ sở nên khớp chính xác với tên xuất khẩu mặc định của nó.

    {
    "1": {
        "roundid": "1",
        "player": "name"
    },
    "2": {
        "roundid": "1",
        "player": "name"
    }
    
    39

⬆ Quay lại đầu

23.7 Sử dụng Camelcase khi bạn xuất D-Default một chức năng. Tên tệp của bạn phải giống hệt với tên chức năng của bạn.

  • 23.8 Sử dụng pascalcase khi bạn xuất một hàm tạo / lớp / singleton / thư viện chức năng / đối tượng trần.
  • 23.9 Các từ viết tắt và khởi tạo phải luôn luôn được sử dụng, hoặc tất cả đều bị hạ thấp.

    {
    "1": {
        "roundid": "1",
        "player": "name"
    },
    "2": {
        "roundid": "1",
        "player": "name"
    }
    
    40

  • Tại sao? Tên là cho khả năng đọc, không để xoa dịu thuật toán máy tính.

    {
    "1": {
        "roundid": "1",
        "player": "name"
    },
    "2": {
        "roundid": "1",
        "player": "name"
    }
    
    41

  • 23.10 Bạn có thể sử dụng ở dưới một hằng số chỉ khi nó (1) được xuất, (2) là một

    {
    "1": {
        "roundid": "1",
        "player": "name"
    },
    "2": {
        "roundid": "1",
        "player": "name"
    }
    
    61 (không thể được chỉ định lại) và (3) lập trình viên có thể tin tưởng nó (và các thuộc tính lồng nhau của nó) để không bao giờ thay đổi.

    {
    "1": {
        "roundid": "1",
        "player": "name"
    },
    "2": {
        "roundid": "1",
        "player": "name"
    }
    
    42

⬆ Quay lại đầu

Tại sao? Đây là một công cụ bổ sung để hỗ trợ trong các tình huống mà lập trình viên sẽ không chắc chắn nếu một biến có thể thay đổi. Uppercase_variables đang cho người lập trình biết rằng họ có thể tin tưởng biến (và các thuộc tính của nó) không thay đổi.

  • Còn tất cả các biến

    {
    "1": {
        "roundid": "1",
        "player": "name"
    },
    "2": {
        "roundid": "1",
        "player": "name"
    }
    
    61 thì sao? - Điều này là không cần thiết, vì vậy không nên sử dụng từ trên cao cho các hằng số trong một tệp. Tuy nhiên, nó nên được sử dụng cho các hằng số xuất khẩu.

    {
    "1": {
        "roundid": "1",
        "player": "name"
    },
    "2": {
        "roundid": "1",
        "player": "name"
    }
    
    43

    prefer:

    {
    "1": {
        "roundid": "1",
        "player": "name"
    },
    "2": {
        "roundid": "1",
        "player": "name"
    }
    
    44

⬆ Quay lại đầu

jQuery

  • 26.1 Các biến đối tượng jQuery tiền tố với

    // bad
    var a = 1;
    var b = 2;
    
    // good
    const a = 1;
    const b = 2;
    28.

    {
    "1": {
        "roundid": "1",
        "player": "name"
    },
    "2": {
        "roundid": "1",
        "player": "name"
    }
    
    45

  • 26.2 Tra cứu JQuery Cache.

    {
    "1": {
        "roundid": "1",
        "player": "name"
    },
    "2": {
        "roundid": "1",
        "player": "name"
    }
    
    46

  • 26.3 Đối với các truy vấn dom sử dụng xếp tầng
    // bad
    var a = 1;
    var b = 2;
    
    // good
    const a = 1;
    const b = 2;
    29 hoặc cha mẹ> con
    // bad
    var a = 1;
    var b = 2;
    
    // good
    const a = 1;
    const b = 2;
    30. JSperf
  • 26.4 Sử dụng

    // bad
    var a = 1;
    var b = 2;
    
    // good
    const a = 1;
    const b = 2;
    31 với các truy vấn đối tượng jQuery phạm vi.

    {
    "1": {
        "roundid": "1",
        "player": "name"
    },
    "2": {
        "roundid": "1",
        "player": "name"
    }
    
    47

⬆ Quay lại đầu

jQuery

  • 26.1 Các biến đối tượng jQuery tiền tố với
    // bad
    var a = 1;
    var b = 2;
    
    // good
    const a = 1;
    const b = 2;
    28.

⬆ Quay lại đầu

jQuery

  • 26.1 Các biến đối tượng jQuery tiền tố với
    // bad
    var a = 1;
    var b = 2;
    
    // good
    const a = 1;
    const b = 2;
    28.
  1. 26.2 Tra cứu JQuery Cache.
  2. 26.3 Đối với các truy vấn dom sử dụng xếp tầng
    // bad
    var a = 1;
    var b = 2;
    
    // good
    const a = 1;
    const b = 2;
    29 hoặc cha mẹ> con
    // bad
    var a = 1;
    var b = 2;
    
    // good
    const a = 1;
    const b = 2;
    30. JSperf
  3. 26.4 Sử dụng
    // bad
    var a = 1;
    var b = 2;
    
    // good
    const a = 1;
    const b = 2;
    31 với các truy vấn đối tượng jQuery phạm vi.
  4. Khả năng tương thích Ecmascript 5
  5. 27.1 Tham khảo bảng tương thích Kangax từ ES5.
  6. Phong cách Ecmascript 6+ (ES 2015+)
  7. 28.1 Đây là một tập hợp các liên kết đến các tính năng ES6+ khác nhau.
  8. Hàm mũi tên
  9. Các lớp học
  10. Đối tượng tốc ký
  11. Đối tượng ngắn gọn
  12. Đối tượng tính toán thuộc tính
  13. Chuỗi mẫu
  14. Phá hủy
  • Tham số mặc định

    Lên đỉnh

⬆ Quay lại đầu

Mảng lan rộng

Cho phép và const

  • Toán tử số mũ

    Tererators và máy phát điện

    {
    "1": {
        "roundid": "1",
        "player": "name"
    },
    "2": {
        "roundid": "1",
        "player": "name"
    }
    
    48

  • Mô -đun

    28.2 Không sử dụng các đề xuất TC39 chưa đạt đến Giai đoạn 3.

    {
    "1": {
        "roundid": "1",
        "player": "name"
    },
    "2": {
        "roundid": "1",
        "player": "name"
    }
    
    49

⬆ Quay lại đầu

Tại sao? Chúng không được hoàn thành, và chúng có thể thay đổi hoặc bị rút hoàn toàn. Chúng tôi muốn sử dụng JavaScript và các đề xuất chưa phải là JavaScript.

  • Thư viện tiêu chuẩnYup.

    {
    "1": {
        "roundid": "1",
        "player": "name"
    },
    "2": {
        "roundid": "1",
        "player": "name"
    }
    
    50

  • Thư viện tiêu chuẩn chứa các tiện ích bị phá vỡ về mặt chức năng nhưng vẫn vì lý do di sản.No, but seriously:
    • 29.1 Sử dụng
      // bad
      var a = 1;
      var b = 2;
      
      // good
      const a = 1;
      const b = 2;
      32 thay vì toàn cầu
      // bad
      var a = 1;
      var b = 2;
      
      // good
      const a = 1;
      const b = 2;
      33. ESLINT:
      // bad
      var a = 1;
      var b = 2;
      
      // good
      const a = 1;
      const b = 2;
      34
    • Tại sao? Toàn cầu
      // bad
      var a = 1;
      var b = 2;
      
      // good
      const a = 1;
      const b = 2;
      33 ép buộc những người không phải là số lượng, trả lại sự thật cho bất cứ điều gì ép buộc với Nan. Nếu hành vi này là mong muốn, hãy làm cho nó rõ ràng.
    • 29.2 Sử dụng
      // bad
      var a = 1;
      var b = 2;
      
      // good
      const a = 1;
      const b = 2;
      36 thay vì toàn cầu
      // bad
      var a = 1;
      var b = 2;
      
      // good
      const a = 1;
      const b = 2;
      37. ESLINT:
      // bad
      var a = 1;
      var b = 2;
      
      // good
      const a = 1;
      const b = 2;
      34
    • Tại sao? Toàn cầu
      // bad
      var a = 1;
      var b = 2;
      
      // good
      const a = 1;
      const b = 2;
      37 ép buộc các số không thành số, trả lại đúng với bất cứ điều gì ép buộc với một số hữu hạn. Nếu hành vi này là mong muốn, hãy làm cho nó rõ ràng.
    • Kiểm tra
    • 30,1 yup.

⬆ Quay lại đầu

30.2 Không, nhưng nghiêm túc:

  • Bất kỳ khung thử nghiệm nào bạn sử dụng, bạn nên viết bài kiểm tra!
  • Phấn đấu để viết nhiều chức năng thuần túy nhỏ và giảm thiểu nơi xảy ra đột biến.
  • Hãy thận trọng về các cuống và giả - chúng có thể làm cho các bài kiểm tra của bạn dễ vỡ hơn.
  • Chúng tôi chủ yếu sử dụng
    // bad
    var a = 1;
    var b = 2;
    
    // good
    const a = 1;
    const b = 2;
    40 và
    // bad
    var a = 1;
    var b = 2;
    
    // good
    const a = 1;
    const b = 2;
    41 tại Airbnb.
    // bad
    var a = 1;
    var b = 2;
    
    // good
    const a = 1;
    const b = 2;
    42 đôi khi cũng được sử dụng cho các mô -đun nhỏ, riêng biệt.
  • Bảo hiểm thử nghiệm 100% là một mục tiêu tốt để phấn đấu, ngay cả khi nó không phải lúc nào cũng thực tế để đạt được nó.
  • Bất cứ khi nào bạn sửa lỗi, hãy viết bài kiểm tra hồi quy. Một lỗi cố định mà không có bài kiểm tra hồi quy gần như chắc chắn sẽ bị phá vỡ trong tương lai.
  • Màn biểu diễn
  • Trên Bố cục & Hiệu suất Web
  • Loading...

⬆ Quay lại đầu

Chuỗi vs mảng concat

Thử/bắt chi phí trong một vòng lặp

  • Chức năng bang
  • jQuery tìm vs bối cảnh, bộ chọn
  • Intern
  • Kết hợp chuỗi dài

Các hàm JavaScript như

const foo = 1;
let bar = foo;

bar = 9;

console.log(foo, bar); // => 1, 9
74,
const foo = 1;
let bar = foo;

bar = 9;

console.log(foo, bar); // => 1, 9
79 và
const foo = 1;
let bar = foo;

bar = 9;

console.log(foo, bar); // => 1, 9
76 được tối ưu hóa cho các mảng đi qua?

  • Tài nguyên

Học es6+

  • Thông số kỹ thuật ECMA mới nhất
    • Khám pháJS
    • Bảng tương thích ES6
  • Tổng quan toàn diện về các tính năng ES6

Đọc này

  • ECMA-262 tiêu chuẩn
  • Công cụ
  • Mã phong cách linters
  • ESLint - Airbnb Style .eslintrc
  • JSHINT - Phong cách Airbnb .Jshintrc

Neutrino preset - @neutrinojs/airbnb

  • Hướng dẫn phong cách khác
  • Hướng dẫn kiểu google javascript
  • Hướng dẫn kiểu Google JavaScript (cũ)
  • Hướng dẫn phong cách cốt lõi của JQuery

Nguyên tắc viết JavaScript phù hợp, thành ngữ

  • StandardJS
  • Phong cách khác
  • Đặt tên này trong các chức năng lồng nhau - Christian Johansen
  • Gọi lại có điều kiện - Ross Allen
  • Các quy ước mã hóa JavaScript phổ biến trên Github - Jeonghoon Byun

Nhiều tuyên bố VAR trong JavaScript, không thừa - Ben Alman

  • Đọc thêm
  • Hiểu về đóng cửa JavaScript - Angus Croll
  • JavaScript cơ bản cho lập trình viên thiếu kiên nhẫn - Tiến sĩ Axel Rauschmayer
  • Bạn có thể không cần JQuery - Zack Bloom & Adam Schwartz
  • Tính năng ES6 - Luke Hoban
  • Hướng dẫn phía trước - Benjamin de Cock
  • Sách
  • JavaScript: Phần tốt - Douglas Crockford
  • Mẫu JavaScript - Stoyan Stefanov
  • Các mẫu thiết kế JavaScript Pro - Ross Harmes và Dustin Diaz
  • Trang web hiệu suất cao: Kiến thức cần thiết cho các kỹ sư mặt trước - Steve Souders
  • JavaScript có thể duy trì - Nicholas C. Zakas
  • Ứng dụng web JavaScript - Alex Maccaw
  • Kỹ thuật JavaScript Pro - John Resig
  • Smashing Node.js: JavaScript ở khắp mọi nơi - Guillermo Rauch
  • Bí mật của Ninja JavaScript - John Resig và Bear Bibeault

JavaScript của con người - Henrik Joreteg

  • Superhero.js - Kim Joar Bekkelund, Mads Mobæk, & Olav Bjorkoy
  • JSbooks - Julien Bouquillon
  • JavaScript của bên thứ ba - Ben Vinegar và Anton Kovalyov
  • JavaScript hiệu quả: 68 cách cụ thể để khai thác sức mạnh của JavaScript - David Herman
  • JavaScript hùng hồn - Marijn Haverbeke
  • Bạn không biết JS: ES6 & Beyond - Kyle Simpson
  • Blog
  • JavaScript hàng tuần
  • JavaScript, JavaScript ...

Bocoup weblog

  • Đầy đủ tốt
  • Nczonline

⬆ Quay lại đầu

Sự hoàn hảo giết chết

Ben Alman

  • 123erfasst: 123erfasst/javascript: 123erfasst/javascript
  • 4catalyzer: 4catalyzer/javascript: 4Catalyzer/javascript
  • Aan Zee: Aanzee/JavaScript: AanZee/javascript
  • Airbnb: Airbnb/JavaScript: airbnb/javascript
  • Alopeyk: Alopeyk: AloPeyk
  • Altschool: Altschool/JavaScript: AltSchool/javascript
  • ApartMint: ApartMint/JavaScript: apartmint/javascript
  • Ghế quy định: ascribe/javascript: ascribe/javascript
  • Avant: Avantcredit/JavaScript: avantcredit/javascript
  • Axept: Axept/JavaScript: axept/javascript
  • Billabong: Billabong/JavaScript: billabong/javascript
  • Bisk: Bisk: bisk
  • Bonhomme: Bonhommeparis/JavaScript: bonhommeparis/javascript
  • BrainShark: BrainShark/JavaScript: brainshark/javascript
  • Casenine: Casenine/JavaScript: CaseNine/javascript
  • Cerner: Cerner: Cerner
  • Chartboost: Hướng dẫn theo kiểu Chartboost/JavaScript: ChartBoost/javascript-style-guide
  • Coeur D'Alene Tribe: www.cdatribe-nsn.gov: www.cdatribe-nsn.gov
  • CAMESAONLINE: CAMESAONLINE/JavaScript: comparaonline/javascript
  • Học la bàn: Hướng dẫn theo kiểu la bàn/theo kiểu JavaScript: compasslearning/javascript-style-guide
  • Dailymotion: Dailymotion/JavaScript: dailymotion/javascript
  • Dosome: DoSomething/eslint-config
  • DigitPaint DigitPaint/JavaScript digitpaint/javascript
  • Drupal: www.drupal.org: www.drupal.org
  • Ecosia: Ecosia/JavaScript: ecosia/javascript
  • Evernote: Evernote/JavaScript Style-Guide: evernote/javascript-style-guide
  • Gaming Evolution: Evolution-Gaming/JavaScript: evolution-gaming/javascript
  • Evozonjs: Evozonjs/JavaScript: evozonjs/javascript
  • ExcactTarget: excittarget/javaScript: ExactTarget/javascript
  • Flexberry: Flexberry/JavaScript Style-Guide: Flexberry/javascript-style-guide
  • Gawker Media: Gawkermedia: gawkermedia
  • General Electric: Generalelectric/JavaScript: GeneralElectric/javascript
  • TUX thế hệ: Thế hệTux/JavaScript: GenerationTux/javascript
  • Gooddata: Gooddata/GDC-JS theo phong cách: gooddata/gdc-js-style
  • GreenChef: GreenChef/JavaScript: greenchef/javascript
  • Grooveshark: Grooveshark/JavaScript: grooveshark/javascript
  • Grupo-Abraxas: Grupo-Abraxas/JavaScript: Grupo-Abraxas/javascript
  • Happeo: Happeo/JavaScript: happeo/javascript
  • Mật ong: Honeyscience/JavaScript: honeyscience/javascript
  • Làm thế nào về chúng tôi: Howaboutwe/JavaScript: howaboutwe/javascript
  • HubSpot: HubSpot/JavaScript: HubSpot/javascript
  • Hyper: Hyperoslo/JavaScript-Playbook: hyperoslo/javascript-playbook
  • Nhóm liên tỉnh: Hướng dẫn theo kiểu Intercitygroup/JavaScript: intercitygroup/javascript-style-guide
  • JAM3: JAVASCRIPT-Code Conventions: Jam3/Javascript-Code-Conventions
  • JSSsolutions: JSSolutions/JavaScript: JSSolutions/javascript
  • Kaplan Komputing: Kaplankomputing/JavaScript: kaplankomputing/javascript
  • Kickorstick: Kickorstick: kickorstick
  • Giải pháp động học: Kinetica/JavaScript: kinetica/javascript
  • Leinwand: Leinwand/JavaScript: LEINWAND/javascript
  • Hành tinh cô đơn: Lonelyplanet/JavaScript: lonelyplanet/javascript
  • M2Gen: M2Gen/JavaScript: M2GEN/javascript
  • Mùa xuân hùng mạnh: Mightyspring/JavaScript: mightyspring/javascript
  • MINNPOST: MINNPOST/JavaScript: MinnPost/javascript
  • Mitocgroup: Mitocgroup/JavaScript: MitocGroup/javascript
  • Muber: Muber: muber
  • Hiệp hội Địa lý Quốc gia: Natgeosociety: natgeosociety
  • NULLDEV:: NullDevCo/JavaScript-Styleguide
  • Nulogy: Nulogy/JavaScript: nulogy/javascript
  • Orange Hill Development: Orangehill/JavaScript: orangehill/javascript
  • Sức khỏe Orion: Orionhealth/JavaScript: orionhealth/javascript
  • Peerby: Peerby/JavaScript: Peerby/javascript
  • Cầu tàu 1: Pier1/JavaScript: Pier1/javascript
  • Qotto: Hướng dẫn theo phong cách Qotto/JavaScript: Qotto/javascript-style-guide
  • React: Reactjs.org/docs/how-to-contribution.html#style-guide: reactjs.org/docs/how-to-contribute.html#style-guide
  • REI: Hướng dẫn theo phong cách REIDEV/JS: reidev/js-style-guide
  • Ripple: Hướng dẫn theo phong cách Ripple/JavaScript: ripple/javascript-style-guide
  • Siêu thị Sainsbury: Jsainsburyplc: jsainsburyplc
  • Shutterfly: Shutterfly/JavaScript: shutterfly/javascript
  • Sourcetoad: Sourcetoad/JavaScript: sourcetoad/javascript
  • Lò xo: ​​lò xo: springload
  • Stratodem Analytics: Stratodem/JavaScript: stratodem/javascript
  • Phát triển Steelkiwi: Steelkiwi/JavaScript: steelkiwi/javascript
  • Sinh viên: Sinh viên/JavaScript: studentsphere/javascript
  • SwoopApp: SwoopApp/JavaScript: swoopapp/javascript
  • Sysgarage: Sysgarage/JavaScript Style-Guide: sysgarage/javascript-style-guide
  • Syzygy Warsaw: Syzygypl/JavaScript: syzygypl/javascript
  • Target: Target/JavaScript: target/javascript
  • Terra: Terra: terra
  • Theladders: Theladder/JavaScript: TheLadders/javascript
  • The Nerdery: Thenerdery/JavaScript-Stards: thenerdery/javascript-standards
  • Tomify: Tomprats: tomprats
  • Traitify: Traitify/Eslint-Config Traitify: traitify/eslint-config-traitify
  • Công nghệ T4R: T4R-Technology/JavaScript: T4R-Technology/javascript
  • Urbansim: Urbansim: urbansim
  • VOXFEED: Hướng dẫn theo phong cách Voxfeed/JavaScript: VoxFeed/javascript-style-guide
  • Webox Studio: WeBoxStudio/JavaScript: weboxstudio/javascript
  • Weggo: Weggo/JavaScript: Weggo/javascript
  • Zvel: Zvel/JavaScript: zillow/javascript
  • ZocDoc: ZocDoc/JavaScript: ZocDoc/javascript

⬆ Quay lại đầu

Dịch

Hướng dẫn kiểu này cũng có sẵn trong các ngôn ngữ khác:

Hướng dẫn kiểu JavaScript

  • Tài liệu tham khảo

Trò chuyện với chúng tôi về JavaScript

  • Tìm chúng tôi trên Gitter.

Người đóng góp

  • Xem những người đóng góp

Giấy phép

(Giấy phép MIT)

Bản quyền (c) 2012 Airbnb

Quyền được cấp, miễn phí, cho bất kỳ ai có được bản sao phần mềm này và các tệp tài liệu liên quan ('phần mềm'), để giải quyết phần mềm mà không bị hạn chế, bao gồm không giới hạn quyền sử dụng, sao chép, sửa đổi, hợp nhất , Xuất bản, Phân phối, Bán cấp và/hoặc Bán các bản sao của phần mềm và cho phép những người mà phần mềm được cung cấp để làm như vậy, tuân theo các điều kiện sau:

Thông báo bản quyền trên và Thông báo quyền này sẽ được bao gồm trong tất cả các bản sao hoặc các phần đáng kể của phần mềm.

Phần mềm được cung cấp 'như là', không có bảo hành dưới bất kỳ hình thức nào, rõ ràng hay ngụ ý, bao gồm nhưng không giới hạn trong các bảo đảm của thương mại, thể lực cho một mục đích cụ thể và không bị thiếu sót. Trong mọi trường hợp, các tác giả hoặc chủ bản quyền sẽ phải chịu trách nhiệm đối với bất kỳ khiếu nại, thiệt hại hoặc trách nhiệm nào khác, cho dù trong hành động của hợp đồng, tra tấn hay nói cách khác, phát sinh từ hoặc liên quan đến phần mềm hoặc việc sử dụng hoặc các giao dịch khác trong PHẦN MỀM.

⬆ Quay lại đầu

Dịch

Hướng dẫn kiểu này cũng có sẵn trong các ngôn ngữ khác:

Hướng dẫn kiểu JavaScript