ECMAScript6-基础22-其他变化

本文介绍了ES6中的一些最佳实践,包括使用let替代var避免变量提升,利用const创建全局常量以提高程序效率,以及字符串的静态与动态表示。此外,详细阐述了解构赋值在数组和对象中的应用,提倡使用对象解构以方便扩展。在对象定义上,推荐单行定义时省略尾随逗号,并尽量使对象静态化。对于数组,推荐使用扩展运算符进行拷贝,以及Array.from方法转换类似数组对象。最后,文章强调了箭头函数在简洁性和this绑定上的优势,以及函数参数和返回值的处理方式。

目录

 

块级作用域

字符串

解构赋值

对象

数组

函数


 

块级作用域

①let取代var:ES6 提出了两个新的声明变量的命令:let和const。其中,let完全可以取代var,因为两者语义相同,而且let没有副作用。var命令存在变量提升效用,let命令没有这个问题。

②全局常量和线程安全:在let和const之间,建议优先使用const,尤其是在全局环境,不应该设置变量,只应设置常量。

const优于let有几个原因。一个是const可以提醒阅读程序的人,这个变量不应该改变;另一个是const比较符合函数式编程思想,运算不改变值,只是新建值,而且这样也有利于将来的分布式运算;最后一个原因是 JavaScript 编译器会对const进行优化,所以多使用const,有利于提高程序的运行效率,也就是说let和const的本质区别,其实是编译器内部的处理不同。

字符串

静态字符串一律使用单引号或反引号,不使用双引号。

动态字符串使用反引号。

// bad

const a = "foobar";

const b = 'foo' + a + 'bar';

// acceptable

const c = `foobar`;

// good

const a = 'foobar';

const b = `foo${a}bar`;

解构赋值

使用数组成员对变量赋值时,优先使用解构赋值。

函数的参数如果是对象的成员,优先使用解构赋值。

如果函数返回多个值,优先使用对象的解构赋值,而不是数组的解构赋值。这样便于以后添加返回值,以及更改返回值的顺序。

const arr = [1, 2, 3, 4];

 

// bad

const first = arr[0];

const second = arr[1];

 

// good

const [first, second] = arr;

 

// 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 }) {

}

 

// bad

function processInput(input) {

  return [left, right, top, bottom];

}

 

// good

function processInput(input) {

  return { left, right, top, bottom };

}

 

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

 

对象

单行定义的对象,最后一个成员不以逗号结尾。多行定义的对象,最后一个成员以逗号结尾。

// 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,

};

对象尽量静态化,一旦定义,就不得随意添加新的属性。如果添加属性不可避免,要使用Object.assign方法。

如果对象的属性名是动态的,可以在创造对象的时候,使用属性表达式定义。

另外,对象的属性和方法,尽量采用简洁表达法,这样易于描述和书写。

数组

使用扩展运算符(...)拷贝数组。

使用 Array.from 方法,将类似数组的对象转为数组。

// bad

const len = items.length;

const itemsCopy = [];

let i;

 

for (i = 0; i < len; i++) {

  itemsCopy[i] = items[i];

}

 

// good

const itemsCopy = [...items];

 

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

const nodes = Array.from(foo);

函数

立即执行函数可以写成箭头函数的形式。

那些使用匿名函数当作参数的场合,尽量用箭头函数代替。因为这样更简洁,而且绑定了 this。

简单的、单行的、不会复用的函数,建议采用箭头函数。如果函数体较为复杂,行数较多,还是应该采用传统的函数写法。

所有配置项都应该集中在一个对象,放在最后一个参数,布尔值不可以直接作为参数。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值