中文原地址

1.对所有的引用使用 const 而非 var。这能确保你无法对引用重复赋值。

当需要变动引用时,使用let。

 const和let都是块级作用域。

2.创建对象的方式:

  const item = {};

  使用对象属性的简写,且为简写的属性分组。

3.创建数组的方式:

  const arr = [ ];

  使用arr.push()去替代直接赋值。

  使用拓展运算符去赋值数组: arrCopy = [...arr];

  使用Array.from()把一个类数组对象转换成数组:

    const foo = document.querySelectorAll('.foo');

    const nodes = Aarry.from(foo);

4.解构:

  使用解构存取和使用多属性对象:

function getFullName({ firstName, lastName }) {
return `${firstName} ${lastName}`;
}

  对数组也使用解构赋值:

const arr = [1, 2, 3, 4];
const [first, second] = arr; // 等同于first = arr[0],second = arr[1]

  返回多个值时使用对象解构:这样不用在意属性的顺序

function returnInput (input) {
...
return { left, right, top, bottom };
}
const { left, right } = processInput(input);

5.Strings

  程序化生成字符串时,使用模板字符串代替字符串链接

function sayHi(name) {
return `How are you, ${name}?`;
}

6.函数

  使用函数声明代替函数表达式

function foo() {
}

  立即调用的函数表达式:

(()=> {
console.log('Welcome to the Internet. Please follow me.');
})();

  永远不要在非函数代码块(if,while)中声明一个函数,把那个函数赋给一个变量。

let test;
if (current) {
test = () => {
...
};
}

  不要使用arguments,可以选择rest语法...替代。rest是一个真正的数组,且能明确你要传入的参数

function cont(...args) {
return args.join('');
}

  直接给函数的参数指定默认值,不要使用一个变化的函数参数

function fn(opts = {}) {...}

7.构造器

  总是使用class,避免直接操作prototype。

  使用extends继承。

  方法可以返回this来帮助链式调用。

8.模块

  总是使用模组(import/export)而非其他非标模块系统。

import { es6 } from './AirbnbStyleGuide';
export default es6;

  不要使用通配符import以确保只有一个默认export

  不要从import中直接export

9.迭代器

  使用高阶函数如map()/reduce()去替代for-of

const number = [1, 2, 3, 4, 5];
const sum = numbers.reduce((total, num) => total + num, 0);
sum === 15;
...

10.属性

  使用 . 访问对象的属性。

  当通过变量访问属性时使用中括号[]  

11.变量

  一直使用const来声明变量以防止全局污染,且用const为每一个变量声明。

  将所有的const和let分组。

12.提升

  使用let和const不会被提升,所以必须声明在前面。

  匿名函数的表达式的变量名会被提升但是函数内容不会

  命名的函数表达式的变量名会被提升,但是函数名和函数内容不会

  函数声明的名称和哈你数体都会被提升。

  以上和js的解析机制有关。

13.

  优先使用 === 和 !==  而非 == / !=

  条件表达式中:

    对象被计算为true

    undefined / null 都为false

    数字除  +0 / -0 / NaN 外 都为true

    字符串除‘ ’外都为true

14.代码块

  使用大括号包裹所有的多行代码块,单行不必。

15.注释

  使用/**...*/作为多行注释

  使用//作为单行注释,在评论对象上另起一行,且在注释前插入空行

  使用 // FIXME 标注问题

  使用 // TODO 标注问题的解决方式

16.空格

  在块末和新语句前插入空行

17.类型转换

  字符串:不要使用 + ‘ ’

//  => this.reviewScore = 9;
const totalScore = String(this.reviewScore);

  数字:使用parseInt,并带上转换类型的基数

const inputValue = '4';
const val = Number(inputValue); // 或者
const val = parseInt(inputValue, 10);

  布尔:

const age = 0;
const hasAge = Boolean(age); // 或者
const hasAge = !!age;

18.命名规则

  使用帕斯卡式命名构造函数或类

  不要使用下划线结尾或开头来命名属性和方法

  不要保存this的引用。使用箭头函数或Function#bind

  如果文件只输出一个类,那你的文件名必须和类名完全保持一致(帕斯卡式)

  如果文件导出默认的函数,文件名与该函数名一致。(驼峰式)

19.存取器

  属性的存取函数不是必须的

  使用getValue()和setValue('...')

  如果属性是布尔值,使用isVal() 或 hasVal()

  

Airbnb Javascript 代码规范重要点总结es6的更多相关文章

  1. Airbnb JavaScript代码规范(完整)

    类型Types 基本数据类型 string number boolean null undefined symbol const foo = 1; let bar = foo; bar = 9; co ...

  2. 深入理解JavaScript系列(1):编写高质量JavaScript代码的基本要点

    深入理解JavaScript系列(1):编写高质量JavaScript代码的基本要点 2011-12-28 23:00 by 汤姆大叔, 139489 阅读, 119 评论, 收藏, 编辑 才华横溢的 ...

  3. 高质量JavaScript代码书写基本要点

    翻译-高质量JavaScript代码书写基本要点 by zhangxinxu from http://www.zhangxinxu.com本文地址:http://www.zhangxinxu.com/ ...

  4. 高质量JavaScript代码书写基本要点学习

    高质量JavaScript代码书写基本要点学习 可维护的代码意味着: •可读的 •一致的 •可预测的 •看上去就像是同一个人写的 •已记录   最小全局变量(Minimizing Globals)   ...

  5. 编写高质量JavaScript代码的基本要点记录

    原文:深入理解JavaScript系列(1):编写高质量JavaScript代码的基本要点 1.最小全局变量(Minimizing Globals)的重要性 JavaScript通过函数管理作用域.在 ...

  6. 5 JSON&与JavaScript转换&JavaScript:void(0)&JavaScript代码规范

    JSON:JavaScript Object Notation   JS对象简谱 一种轻量级的数据交换格式,用于存储和传输数据的格式,通常用于服务端向网页传递数据 是独立的语言,易于理解 JSON语法 ...

  7. JavaScript 代码规范

    所有的 JavaScript 项目适用同一种规范. JavaScript 代码规范 代码规范通常包括以下几个方面: 变量和函数的命名规则 空格,缩进,注释的使用规则. 其他常用规范-- 规范的代码可以 ...

  8. js基石之---易读、易复用、易重构的 JavaScript 代码规范

    易读.易复用.易重构的 JavaScript 代码规范 1.变量命名规范有意义 Bad: const yyyymmdstr = moment().format("YYYY/MM/DD&quo ...

  9. javascript代码规范 [转]

    原文:http://www.css88.com/archives/5366 全局命名空间污染与 IIFE 总是将代码包裹成一个 IIFE(Immediately-Invoked Function Ex ...

随机推荐

  1. (一)为什么要UML

    1 建模的意义 模型是对于现实的简化,建模是为了更好的理解系统 模型帮助我们按照实际情况或需求对系统可视化 模型允许我们详细说明系统的构造,行为 模型给出一个构造系统的模板 模型对我们做出的决策进行文 ...

  2. mysql分库 分页查询

    Mysql海量数据分表分库如何列表分页? 1.现在使用ElasticSearch了.基于Lucene的解决方案 2.必须将mysql里的数据写入到类似hbase这样的分布式数据库,查询快.但分页.查询 ...

  3. shell for 循环

    test.sh #!/bin/bash for str in "C语言" "http://www.bilibili.com" "成立7年了" ...

  4. .Net Core 管道中的ConfigureServices 和Configure

    ConfigureServices    就是配置服务器的DI容器 把需要的中间件等一些东西添加到DI容器   最后都是添加到IServiceCollection里面 比如 services.AddI ...

  5. (简单)华为P9plus VIE-AL00的usb调试模式在哪里开启的经验

    每次我们使用pc接通安卓手机的时候,如果手机没有开启Usb调试模式,pc则没能成功检测到我们的手机,有时,我们使用的一些功能比较强的的app比如之前我们使用的一个app引号精灵,老版本就需要打开Usb ...

  6. java动态代理实现与原理详细分析(代码层面解释了AOP的实现)

    关于Java中的动态代理,我们首先需要了解的是一种常用的设计模式--代理模式,而对于代理,根据创建代理类的时间点,又可以分为静态代理和动态代理. 一.代理模式    代理模式是常用的java设计模式, ...

  7. Linux系统时间, 硬件BIOS时间的校准与同步

    #宿主机系统时间: date #宿主机时间校准方法: yum install -y ntpdate ntpdate -u ntp.api.bz #centos查看设置系统时区:(可能没有) cat / ...

  8. prometheus相关文章

    prometheus book https://yunlzheng.gitbook.io/prometheus-book/ 开发自己的分布式监控Prometheus Exporter时遇到的坑 htt ...

  9. WIN10下Java环境变量配置

    首先,你应该已经安装了 Java 的 JDK 了(如果没有安装JDK,请跳转到此网址:http://www.oracle.com/technetwork/java/javase/downloads/i ...

  10. leetcode刷题——一些算法技巧总结1.0

    运算符优先级,简单记就是:! > 算术运算符 > 关系运算符 > && > || > 赋值运算符 把数字取反,可以作为一种标记 pythonlast = ...