• ES6 入门教程 26 编程风格 26.7 Map 结构 & 26.8 Class & 26.9 模块 & 26.10 ESLint 的使用


    ES6 入门教程

    ECMAScript 6 入门

    作者:阮一峰

    本文仅用于学习记录,不存在任何商业用途,如侵删

    26 编程风格

    26.7 Map 结构

    注意区分 Object 和 Map,只有模拟现实世界的实体对象时,才使用 Object。如果只是需要key: value的数据结构,使用 Map 结构。

    因为 Map 有内建的遍历机制。

    let map = new Map(arr);
    
    for (let key of map.keys()) {
      console.log(key);
    }
    
    for (let value of map.values()) {
      console.log(value);
    }
    
    for (let item of map.entries()) {
      console.log(item[0], item[1]);
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    26.8 Class

    总是用 Class,取代需要 prototype 的操作。因为 Class 的写法更简洁,更易于理解。

    // bad
    function Queue(contents = []) {
      this._queue = [...contents];
    }
    Queue.prototype.pop = function() {
      const value = this._queue[0];
      this._queue.splice(0, 1);
      return value;
    }
    
    // good
    class Queue {
      constructor(contents = []) {
        this._queue = [...contents];
      }
      pop() {
        const value = this._queue[0];
        this._queue.splice(0, 1);
        return value;
      }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21

    使用extends实现继承,因为这样更简单,不会有破坏instanceof运算的危险。

    // bad
    const inherits = require('inherits');
    function PeekableQueue(contents) {
      Queue.apply(this, contents);
    }
    inherits(PeekableQueue, Queue);
    PeekableQueue.prototype.peek = function() {
      return this._queue[0];
    }
    
    // good
    class PeekableQueue extends Queue {
      peek() {
        return this._queue[0];
      }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    26.9 模块

    ES6 模块语法是 JavaScript 模块的标准写法,坚持使用这种写法,取代 Node.js 的 CommonJS 语法。

    首先,使用import取代require()

    // CommonJS 的写法
    const moduleA = require('moduleA');
    const func1 = moduleA.func1;
    const func2 = moduleA.func2;
    
    // ES6 的写法
    import { func1, func2 } from 'moduleA';
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    其次,使用export取代module.exports

    // commonJS 的写法
    var React = require('react');
    
    var Breadcrumbs = React.createClass({
      render() {
        return <nav />;
      }
    });
    
    module.exports = Breadcrumbs;
    
    // ES6 的写法
    import React from 'react';
    
    class Breadcrumbs extends React.Component {
      render() {
        return <nav />;
      }
    };
    
    export default Breadcrumbs;
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21

    如果模块只有一个输出值,就使用export default,如果模块有多个输出值,除非其中某个输出值特别重要,否则建议不要使用export default,即多个输出值如果是平等关系,export default与普通的export就不要同时使用。

    如果模块默认输出一个函数,函数名的首字母应该小写,表示这是一个工具方法。

    function makeStyleGuide() {
    }
    
    export default makeStyleGuide;
    
    • 1
    • 2
    • 3
    • 4

    如果模块默认输出一个对象,对象名的首字母应该大写,表示这是一个配置值对象。

    const StyleGuide = {
      es6: {
      }
    };
    
    export default StyleGuide;
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    26.10 ESLint 的使用

    ESLint 是一个语法规则和代码风格的检查工具,可以用来保证写出语法正确、风格统一的代码。

    首先,在项目的根目录安装 ESLint。

    $ npm install --save-dev eslint
    
    • 1

    然后,安装 Airbnb 语法规则,以及 import、a11y、react 插件。

    $ npm install --save-dev eslint-config-airbnb
    $ npm install --save-dev eslint-plugin-import eslint-plugin-jsx-a11y eslint-plugin-react
    
    • 1
    • 2

    最后,在项目的根目录下新建一个.eslintrc文件,配置 ESLint。

    {
      "extends": "eslint-config-airbnb"
    }
    
    • 1
    • 2
    • 3

    现在就可以检查,当前项目的代码是否符合预设的规则。

    index.js文件的代码如下。

    var unused = 'I have no purpose!';
    
    function greet() {
        var message = 'Hello, World!';
        console.log(message);
    }
    
    greet();
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    使用 ESLint 检查这个文件,就会报出错误。

    $ npx eslint index.js
    index.js
      1:1  error  Unexpected var, use let or const instead          no-var
      1:5  error  unused is defined but never used                 no-unused-vars
      4:5  error  Expected indentation of 2 characters but found 4  indent
      4:5  error  Unexpected var, use let or const instead          no-var
      5:5  error  Expected indentation of 2 characters but found 4  indent
    
    ✖ 5 problems (5 errors, 0 warnings)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    上面代码说明,原文件有五个错误,其中两个是不应该使用var命令,而要使用letconst;一个是定义了变量,却没有使用;另外两个是行首缩进为 4 个空格,而不是规定的 2 个空格。

    【秒啊】

  • 相关阅读:
    在两个进程间进行通信的小demo
    一、openCV+TensorFlow环境搭建
    KoTime:v2.3.4新增堆内存、物理内存和CPU使用情况统计
    简单介绍二分类问题评价指标
    【JavaSE】网络编程
    FE_Vue学习笔记 - 数据代理
    常用工具类commons-lang3的学习使用
    Go For Web:Golang http 包详解(源码剖析)
    vim基础指令(自用)
    Web3.0的测试题
  • 原文地址:https://blog.csdn.net/weixin_44226181/article/details/128031292