编程规范(初尝ES6与webpack)
//针对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)的更多相关文章
- 初尝Windows 下批处理编程
本文叫“ 初尝Windows 下批处理编程”是为了延续上一篇“初尝 Perl”,其实对于博主而言批处理以及批处理编程早就接触过了. 本文包括以下内容 1.什么是批处理 2.常用批处理命令 3.简介批处 ...
- 中兴软件编程规范C/C++
Q/ZX 深圳市中兴通讯股份有限公司企业标准 (设计技术标准) Q/ZX 04.302.1–2003 软件编程规范C/C++ 20 ...
- 初尝 Perl
本文将阐述以下几方面内容: 1.什么是Perl 2.Perl有什么用 3.Windows 下的Perl环境搭建 4.Perl 版Hello World 5.Perl 语法梗概 6.一些参考资料 什么是 ...
- seajs初尝 加载jquery返回null解决学习日志含示例下载
原文地址:http://www.tuicool.com/articles/bmuaEb 如需demo示例,请点击下方链接下载: http://yunpan.cn/cVEybKs8nV7CF 提取码 ...
- .NET领域驱动设计—初尝(三:穿过迷雾走向光明)
开篇介绍 在开始这篇富有某种奇妙感觉的文章之旅时我们先短暂的讨论一下关于软件开发方法论的简要: 纵观软件开发方法论,从瀑布模型.螺旋模型.RUP(统一软件开发过程).XP(极限编程).Agile(敏捷 ...
- .NET编程规范
.NET开发编程规范 第1章 程序的版式 版式虽然不会影响程序的功能,但会影响可读性.程序的版式追求清晰.美观,是程序风格的重要构成因素. 可以把程序的版式比喻为"书法".好的&q ...
- .NET领域驱动设计—初尝(一:疑问、模式、原则、工具、过程、框架、实践)
.NET领域驱动设计—初尝(一:疑问.模式.原则.工具.过程.框架.实践) 2013-04-07 17:35:27 标签:.NET DDD 驱动设计 原创作品,允许转载,转载时请务必以超链接形式标明 ...
- C++语言编程规范
前言 这里参考了<高质量C++C 编程指南 林锐>.<google C++编程指南>以及<华为C++语言编程规范>编写了这份C++语言编程规范文档,以合理使用 C+ ...
- JS编程规范
在第一家公司用C++时,公司有着严格的代码规范,甚至到了严苛的地步,现在回想起来,对它充满感激.一个好的习惯让你收益终身. 之后使用JS/TS却没有为自己定一套编程规范,所幸为时不晚,在这里参考air ...
随机推荐
- Mysql SQL执行错误:#1136
情况:在插入数据时可能会遇到这种情况: 原因: 插入时的数据个数与表中的字段个数不一致 解决方法: 检查表中的字段数与代码中所插入的数据字段数是否一致 例如:以下为Salary表中结构 虽然ActI ...
- timesten 修改最大连接数
修改完/var/Timesten/sys.odbc.ini里面的connections之后 重启TT:ttdaemonadmin -restart 报错:15019: Only the instanc ...
- swust oj 237
Calculate Sum-Of-Absolute-Differences 1000(ms) 65535(kb) 131 / 683 给你N个正整数,求两两之差的绝对值之和. 比如有4个数分别为 3, ...
- LocalDate
java中做时间处理时一般会采用java.util.Date,但是相比于Date来说,还有更好的选择 -- java.time.LocalDate. 这是jdk8中新增的日期处理类,同时新增的还有ja ...
- pta第一次总结
1).实验代码 include<stdio.h> int main() { int n,i,j,a1,a2,b1,b2,sum,x,k; char c; while(~scanf(&quo ...
- laravel的日志权限
命令行脚本运行时报错 UnexpectedValueException : The stream or file "/Data/PMS/storage/logs/laravel-2019- ...
- Ultimate Guide to WeChat for Business 2019
Ultimate Guide to WeChat for Business 2019 By Iaroslav Kudritskiy (source :https://rocketbots.io/blo ...
- sql的基本语句
SQL中的inner join, left join, right join, full join 创建两个测试表并且输入相关值create table test_a(aid int,aNum var ...
- PHPstorm 2017激活
网上看了很多,有用没几个.特别亲身试验了下.有一个有用的.摘录下来.备忘. 感谢该篇博文的作者.https://blog.csdn.net/veloi/article/details/71307942 ...
- java-方法重载、参数传递、
1.Java的方法重载overload:同一个类内,可以有多个同名的方法,只要参数不同即可(包括参数类型和个数.多类型顺序) 2.基本类型(8种:byte\short\int\long\double\ ...