类型

    1. 基础类型
      1. 字符串(string)
      2. 数值(Number)
      3. 布尔类型(Boolean)
      4. null
      5. undefined

    注意事项:定义变量禁止使用null, 请使用 undefined 或者 void(0);

    1. //Number
    2. const num = 1;
    3. //String
    4. const str = 'Hello world';
    5. //undefined --good
    6. const undef = undefined;
    7. const undef = void(0);
    8. //null
    9. //禁止使用 bad
    10. const nullValue = null;
    11. //Boolean
    12. const bool = true;
    13. //OR
    14. const bool = false;
    1. 复杂类型
      1. 对象(Object)
      2. 数组 (Array)
      3. 函数 (Function) ```javascript //定义一个空对象 const obj = {}; //good const obj = new Object(); // bad

    //定义一个空数组 const arr = []; // good const arr = new Array(); // bad

    //定义一个函数 var fun = function() {}; //OR var fn = ()=> {};

    1. **引用**<br />禁止使用`var`定义变量,请使用`let`或者`const`定义变量.
    2. ```javascript
    3. // bad
    4. var a = 'test';
    5. // good
    6. let a = 'test'; //需要改变的值定义
    7. //OR
    8. const a = 'test'; //无需改变的值定义

    原型
    使用 class,避免直接操作 prototype

    1. //bad
    2. let exmp = ()=>{}
    3. exmp.prototype.newFun = (){};
    4. //good
    5. class exmp {
    6. constructor (){}
    7. newFun(){}
    8. }

    模块
    使用标准的 ES6 模块语法 import 和 export

    1. // bad
    2. const exmp = require('./exmp');
    3. module.exports = exmp;
    4. // good
    5. import exmp from './exmp';
    6. export default exmp;
    7. // better
    8. import { exmp } from './exmp';
    9. export default exmp;

    尽量不要使用**import 的通配符 ,如果是自己写的js**确保你只有一个默认的 export.*

    1. // bad
    2. import * as exmp from './exmp'
    3. // good
    4. import exmp from './exmp'

    迭代器
    禁止使用 iterators ,使用高阶函数例如 forEach() 或 reduce() 替代 for-of

    1. const nums = [1, 2, 3, 4, 5];
    2. // bad
    3. let index = 0
    4. for (let i of nums) {
    5. index += i;
    6. }
    7. // good
    8. let index = 0;
    9. nums.forEach(i => index += i)
    10. // better
    11. const index = nums.reduce((total, i) => total + i, 0);

    对象属性
    一般情况下,使用 . 访问对象属性, 除非未定义的字段

    1. const test = {
    2. a:1,
    3. b:2
    4. };
    5. //bad
    6. test['a'];
    7. //good
    8. test.a;
    9. //未定义情况
    10. let test = {
    11. a:1,
    12. b:2
    13. };
    14. test['c'] = 3;

    代码注释
    为了维护方便尽量在方法名和变量名加上注释。如果您的变量名有语义化就可以不用写注释,但是必须通俗易懂.

    eval()
    由于 eval 方法比较 evil,所以我们约定禁止使用该方法

    with() {}
    由于 with 方法会产生神奇的作用域,所以我们也是禁止使用该方法的

    for-in 循环
    推荐使用 for in 语法,但是在对对象进行操作时,容易忘了检测 hasOwnProperty(key),所以我们启用了 ESLintguard-for-in 选项.

    修改内置对象的原型
    禁止新增修改内置对象,如 ObjectArray

    代码规范
    统一团队的编码规范,有助于代码的维护。

    变量命名
    当命名变量时,主流分为驼峰式命名(variableName)和下划线命名(variable_name)两大阵营。尽量使用有含有变量名,可以帮助后期维护代码便于维护

    1. // bad
    2. const len = 10;
    3. // good
    4. const length = 10;
    5. //驼峰式命名
    6. const orderList = [];
    7. //下划线命名
    8. const order_list = [];

    私有函数和公共函数定义
    我们约定带下划线的变量或函数为私有的,否认为公共的.

    1. // 私有函数或方法
    2. const _test = 1;
    3. const _testFun = ()=> {};
    4. //公共方法
    5. const test = 1;
    6. const textFun = ()=> {};

    运算
    因为js存在精度问题,所有我们规定运算使用一下方法,主要用于加减法运算

    1. const num = ((0.1*100) + (0.2*100)) / 100; //=0.3
    2. const num = 0.1+0.2 // 0.30000000000000004

    BOM
    Unicode 字节顺序标记 (BOM) 用来指定代码单元是高字节序还是低字节序。也就是说,是高位在前还是低位在前。UTF-8 不需要 BOM 来表明字节顺序,因为单个字节并不影响字节顺序。
    相信不少同学遇到过 BOM 的坑,这里不多说了,切记不要使用 windows 的记事本改代码!

    定时器使用尽量使用setTimeout避免使用setInterval

    1. //advise
    2. const timer = ()=>{
    3. setTimeout(()=>{
    4. console.log('输出内容')
    5. timer();
    6. },1000);
    7. }
    8. // no advise
    9. const timer = ()=>{
    10. setInterval(()=>{
    11. console.log('输出内容')
    12. },1000);
    13. }