//针对ES6规范(第1-5条)start
1.块级作用域
let/const取代var;
在let和const之间,建议优先使用const,尤其是在全局环境,不应该设置变量,只应设置常量。

2.解构赋值
1)使用数组成员对变量赋值时,优先使用解构赋值。
e.g.
const arr = [1, 2, 3, 4];

// bad
const first = arr[0];
const second = arr[1];

// good
const [first, second] = arr;
2)函数的参数如果是对象的成员,优先使用解构赋值。
e.g.
// bad
function getFullName(user) {
const firstName = user.firstName;
const lastName = user.lastName;
}

// good
function getFullName(obj) {
const { firstName, lastName } = obj;
}

// best
function getFullName({ firstName, lastName }) {
}
3)如果函数返回多个值,优先使用对象的解构赋值,而不是数组的解构赋值。这样便于以后添加返回值,以及更改返回值的顺序。
e.g.
// bad
function processInput(input) {
return [left, right, top, bottom];
}

// good
function processInput(input) {
return { left, right, top, bottom };
}

const { left, right } = processInput(input);

3.对象
单行定义的对象,最后一个成员不以逗号结尾。多行定义的对象,最后一个成员以逗号结尾。
e.g.
// bad
const a = { k1: v1, k2: v2, };
const b = {
k1: v1,
k2: v2
};

// good
const a = { k1: v1, k2: v2 };
const b = {
k1: v1,
k2: v2,
};

4.数组
1)使用扩展运算符(...)拷贝数组。
e.g.
// bad
const len = items.length;
const itemsCopy = [];
let i;

for (i = 0; i < len; i++) {
itemsCopy[i] = items[i];
}

// good
const itemsCopy = [...items];

2)使用 Array.from 方法,将类似数组的对象转为数组。
e.g.
const foo = document.querySelectorAll('.foo');
const nodes = Array.from(foo);

5.Class
1)总是用 Class,取代需要 prototype 的操作。因为 Class 的写法更简洁,更易于理解。
e.g.
// good
class Queue {
constructor(contents = []) {
this._queue = [...contents];
}
pop() {
const value = this._queue[0];
this._queue.splice(0, 1);
return value;
}
}
2)使用extends实现继承,因为这样更简单,不会有破坏instanceof运算的危险。
e.g.
// 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];
}
}
//针对ES6规范end

6.分号与逗号
赋值,定义,返回值,方法调用后强制需要加分号

7.语句块内的函数声明
切勿在语句块内声明函数,在 ES5 的严格模式下,这是不合法的。函数声明应该在定义域的顶层。但在语句块内可将函数申明转化为函数表达式赋值给变量。
e.g.
//bad
if (x) {
function foo() {}
}
//good
if (x) {
var foo = function() {};
}

7.eval 函数
eval() 不但混淆语境还很危险,总会有比这更好、更清晰、更安全的另一种方案来写你的代码,因此尽量不要使用 eval 函数。

8.三元条件判断(if 的快捷方法)
用三元操作符分配或返回语句。在比较简单的情况下使用,避免在复杂的情况下使用。
e.g.
//bad
if(x === 10) {
return 'valid';
} else {
return 'invalid';
}
//good
return x === 10 ? 'valid' : 'invalid';

9.变量与声明
1)变量在函数内部或循环控制条件之前提前声明
e.g.
//bad
function test(){
for(var i=0;i<list.length;i++){
var item = list[i];
}
}
//good
function test(){
var i;
var item;
var len = list.length;
for(i=0;i<len;i++){
item = list[i];
}
}
2)变量命名规则 最好是具象的,布尔值需要带 is,has,can, 单位值需要带 _ms,_s,_px 等
//bad
var height = $("#id").height();
var delay = 3 *1000;
var readYet = false;
//good
var height_px = $("#id").height();
var delay_ms = 3 * 1000;
var isRead = false;
3)定义变量时,不使用逗号
//bad
var arr = [],str = "",obj = {};
//good
var arr = [];
var str = "";
var obj = {};

10.常量
1)常量需要大写,定义在文件头部,并使用 _ 分割
e.g.
//bad
var maxsize = 10;
//good
var MAX_SIZE = 10;

11.函数
1)函数内部不允许使用arguments.callee和arguments.caller
arguments.callee详见:https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Functions/arguments/callee
arguments.caller详见:https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Functions/arguments/caller
2)函数参数不得超过5个 (多于5个使用objectType代替)
//bad
function myTestFunc(a,b,c,d,e,f,g,h){}
//good
function myTestFunc(params){
var a = params.a;
var b = params.b;
}

12.注释
1)文件开头必须要有文件说明注释,时间,作者
/**
*@author hxl
*@date 20180228
*@fileoverview 本文件用于规范前端代码,保证可读性一致性。
*/
2)多行单行注释都被允许
.协议
不要指定引入资源所带的具体协议
e.g.
//bad
<script src="http://cdn.com/foundation.min.js"></script>
.example {
background: url(http://static.example.com/images/bg.jpg);
}
//good
<script src="//cdn.com/foundation.min.js"></script>
.example {
background: url(//static.example.com/images/bg.jpg);
}

编程规范(初尝ES6与webpack)的更多相关文章

  1. 初尝Windows 下批处理编程

    本文叫“ 初尝Windows 下批处理编程”是为了延续上一篇“初尝 Perl”,其实对于博主而言批处理以及批处理编程早就接触过了. 本文包括以下内容 1.什么是批处理 2.常用批处理命令 3.简介批处 ...

  2. 中兴软件编程规范C/C++

    Q/ZX 深圳市中兴通讯股份有限公司企业标准 (设计技术标准) Q/ZX 04.302.1–2003      软件编程规范C/C++                               20 ...

  3. 初尝 Perl

    本文将阐述以下几方面内容: 1.什么是Perl 2.Perl有什么用 3.Windows 下的Perl环境搭建 4.Perl 版Hello World 5.Perl 语法梗概 6.一些参考资料 什么是 ...

  4. seajs初尝 加载jquery返回null解决学习日志含示例下载

    原文地址:http://www.tuicool.com/articles/bmuaEb 如需demo示例,请点击下方链接下载: http://yunpan.cn/cVEybKs8nV7CF  提取码 ...

  5. .NET领域驱动设计—初尝(三:穿过迷雾走向光明)

    开篇介绍 在开始这篇富有某种奇妙感觉的文章之旅时我们先短暂的讨论一下关于软件开发方法论的简要: 纵观软件开发方法论,从瀑布模型.螺旋模型.RUP(统一软件开发过程).XP(极限编程).Agile(敏捷 ...

  6. .NET编程规范

    .NET开发编程规范 第1章 程序的版式 版式虽然不会影响程序的功能,但会影响可读性.程序的版式追求清晰.美观,是程序风格的重要构成因素. 可以把程序的版式比喻为"书法".好的&q ...

  7. .NET领域驱动设计—初尝(一:疑问、模式、原则、工具、过程、框架、实践)

     .NET领域驱动设计—初尝(一:疑问.模式.原则.工具.过程.框架.实践) 2013-04-07 17:35:27 标签:.NET DDD 驱动设计 原创作品,允许转载,转载时请务必以超链接形式标明 ...

  8. C++语言编程规范

    前言 这里参考了<高质量C++C 编程指南 林锐>.<google C++编程指南>以及<华为C++语言编程规范>编写了这份C++语言编程规范文档,以合理使用 C+ ...

  9. JS编程规范

    在第一家公司用C++时,公司有着严格的代码规范,甚至到了严苛的地步,现在回想起来,对它充满感激.一个好的习惯让你收益终身. 之后使用JS/TS却没有为自己定一套编程规范,所幸为时不晚,在这里参考air ...

随机推荐

  1. php数组实现根据某个键值将相同键值合并生成新二维数组的方法

    $infos = array( array( 'a' => 36, 'b' => 'xa', 'c' => '2015-08-28 00:00:00', 'd' => '201 ...

  2. BZOJ4665: 小w的喜糖 DP

    对于这道题,首先每个人的位置并不影响结果 所以我们可以将相同颜色糖果的人放在一块处理 设 $f_{i,j}$ 表示处理到第 $i$ 种糖果至少有 $j$ 人的糖果和原先的类型相同 枚举当前种类中不满足 ...

  3. 【循环数组的最大字串和】Maximal-sum Subsequence

    [循环数组的最大字串和]Maximal-sum Subsequence PROBLEM 题目描述 给一个 N×N 的矩阵 M,可以取连续的一段数(必须是横着或者竖着或者斜着,这个矩阵是循环的,具体如下 ...

  4. mobile_缩放

    document.documentElement.clientWidth       不包含滚动条 window.innerWidth                                  ...

  5. JS-函数声明 和 函数表达式

    问题: 1, function foo() {}; 2, var foo = function () {}; 1,上面的语法是声明,可以提升,因此在函数定义的上方也可以调用 2,下面的语法是函数表达式 ...

  6. Tensorflow Chapter-6

    |--子节点 |--单位节点矩阵:长宽为1,深度不限 |--多维度的二维卷积,和之前的理解不一样:应该是每个通道都要计算在下一层的每个节点上:2*2*3,f=1*1*5 -> 2*2*3*5个参 ...

  7. PAT甲级1103 Integer Factorization【dfs】【剪枝】

    题目:https://pintia.cn/problem-sets/994805342720868352/problems/994805364711604224 题意: 给定一个数n,要求从1~n中找 ...

  8. mysql中in的用法

    今天在工作中遇到一个查询问题,两张表的联合查询,本来我的想法是先查询一张表,然后遍历查到的所有表,拿到id,去另外一张表查询,这样做也能解决问题,但是这样的话,就用不了框架里的分页了,自己写分页比较麻 ...

  9. Java-多态经典例子

    public class A { public String show(D obj) { return ("A and D"); } public String show(A ob ...

  10. 【C++】链表回环检测

    //链表回环检测问题 #include<iostream> #include<cstdlib> using namespace std; ; struct node { int ...