1.新的声明方式
ES6对声明的进行了扩展,现在可以有三种声明方式了。
字面理解ES6的三种声明方式:
- var:它是variable的简写,可以理解成变量的意思。
- let:它在英文中是“让”的意思,也可以理解为一种声明的意思。
- const:它在英文中也是常量的意思,在ES6也是用来声明常量的,常量你可以简单理解为不变的量。
var在ES6里是用来升级全局变量的。let是局部变量声明,let声明只在区块内起作用,外部是不可以调用的。在程序开发中,有些变量是希望声明后在业务层就不再发生变化了,简单来说就是从声明开始,这个变量始终不变,就需要用const进行声明。
2.解构赋值
ES6允许按照一定模式,从数组和对象中提取值,对变量进行赋值,这被称为解构。解构赋值在实际开发中可以大量减少我们的代码量,并且让我们的程序结构更清晰。
2.1简单的数组解构
以前,为变量赋值,我们只能直接指定值。比如下面的代码:
1 | let a=0; |
而现在我们可以用数组解构的方式来进行赋值。
let [a,b,c]=[1,2,3];
上面的代码表示,可以从数组中提取值,按照位置的对象关系对变量赋值。
2.2数组模式和赋值模式统一:
可以简单的理解为等号左边和等号右边的形式要统一,如果不统一解构将失败。
1 | let [a,[b,c],d]=[1,[2,3],4]; |
如果等号两边形式不一样,很可能获得undefined或者直接报错。
2.3 解构的默认值
解构赋值是允许你使用默认值的,先看一个最简单的默认是的例子。
1 | let [foo = true] =[]; |
我们来试试个多个值的数组,并给他一些默认值。
1 | let [a,b="Jawnha"]=['单行道'] |
现在我们对默认值有所了解,但仍需要注意的是undefined和null的区别。
1 | let [a,b="Jawnha"]=['单行道',undefined]; |
undefined相当于什么都没有,b是默认值。
1 | let [a,b="Jawnha"]=['单行道',null]; |
null相当于有值,但值为null。所以b并没有取默认值,而是解构成了null。
2.4对象的解构赋值
注意:对象的解构与数组有一个重要的不同。数组的元素是按次序排列的,变量的取值由它的位置决定;而对象的属性没有次序,变量必须与属性同名,才能取到正确的值。
1 | let {foo,bar} = {foo:'Jawnha',bar:'web'}; |
2.5圆括号的使用
如果在解构之前就定义了变量,这时候你再解构会出现问题。下面是错误的代码,编译会报错。
1 | let foo; |
要解决报错,使程序正常,我们这时候只要在解构的语句外边加一个圆括号就可以了。
1 | let foo; |
2.6字符串的解构
1 | const [a,b,c,d,e,f]="Jawnha"; |
3扩展运算符 & rest运算符
展运算符和rest运算符,它们都是…(三个点)。它们可以很好的为我们解决参数和对象数组未知情况下的编程,让我们的代码更健壮和简洁。
3.1对象扩展运算符(…)
展运算符和rest运算符,它们都是…(三个点)。它们可以很好的为我们解决参数和对象数组未知情况下的编程,让我们的代码更健壮和简洁。
1 | function jawnha(...arg){ |
这时我们看到控制台输出了 1,2,3,undefined,这说明是可以传入多个值,并且就算方法中引用多了也不会报错。
扩展运算符的用处:
我们先用一个例子说明,我们声明两个数组arr1和arr2,然后我们把arr1赋值给arr2,然后我们改变arr2的值,你会发现arr1的值也改变了,因为我们这是对内存堆栈的引用,而不是真正的赋值。
1 | let arr1=['jawnha','github','io']; |
这是我们不想看到的,可以利用对象扩展运算符简单的解决这个问题,现在我们对代码进行改造。
1 | let arr1=['jawnha','github','io']; |
现在控制台预览时,你可以看到我们的arr1并没有改变,简单的扩展运算符就解决了这个问题。
3.2 rest运算符
rest运算符和扩展运算符有很多呢相似之处,甚至很多时候你不用特意去区分。它也用…(三个点)来表示,我们先来看一个例子。
1 | function func(first,...arg){ |
这时候控制台打印出了7,说明我们arg里有7个数组元素,这就是rest运算符的最简单用法。
如何循环输出rest运算符
这里我们用for…of循环来进行打印出arg的值
1 | function func(first,...arg){ |
4字符串模板
ES6对字符串新增的操作,最重要的就是字符串模版,字符串模版的出现让我们再也不用拼接变量了,而且支持在模板里有简单计算操作。
4.1字符串模版
先来看一个在ES5下我们的字符串拼接案例:
1 | let jawnha='jawnha'; |
ES5下必须用+jawnha+这样的形式进行拼接,这样很麻烦而且很容易出错。ES6新增了字符串模版,可以很好的解决这个问题。字符串模版不再使用‘xxx’这样的单引号,而是换成了连接号。这时我们再引用jspang变量就需要用${jspang}这种形式了,我们对上边的代码进行改造。
1 | let jawnha='jawnha'; |
可以看到浏览器出现了和上边代码一样的结果。而且这里边支持html标签和运算符可以试着输入一些。
1 | let jawnha='jawnha'; |
4.2字符串查找
ES6还增加了字符串的查找功能,而且支持中文。
查找是否存在:
先来看一下ES5的写法,其实这种方法并不实用,给我们的索引位置,我们自己还要确定位置。
1 | let blog='博客'; |
上述代码会返回一个索引值
ES6直接用includes就可以判断,不再返回索引值,这样的结果我们更喜欢,更直接。
1 | let blog='博客'; |
判断开头是否存在:
1 | blog.startsWith(jspang); |
判断结尾是否存在:
1 | blog.endsWith(jspang); |
需要注意的是:starts和ends 后边都要加s,我开始时经常写错,希望小伙伴们不要采坑。
4.3复制字符串
我们有时候是需要字符串重复的,比如分隔符和特殊符号,这时候复制字符串就派上用场了,语法很简单。
1 | document.write('jawnha|'.repeat(3)); |
当然ES6对字符串还有一些其它操作,这里就不作太多的介绍了。
5 ES6数字操作
5.1数字判断和转换
数字验证Number.isFinite( xx )
可以使用Number.isFinite( )来进行数字验证,只要是数字,不论是浮点型还是整形都会返回true,其他时候会返回false。
1 | let a= 11/4; |
NaN验证
NaN是特殊的非数字,可以使用Number.isNaN()来进行验证。下边的代码控制台返回了true。
1 | console.log(Number.isNaN(NaN)); |
判断是否为整数Number.isInteger(xx)
1 | let a=123.1; |
整数转换Number.parseInt(xxx)和浮点型转换Number.parseFloat(xxx)
1 | let a='9.18'; |
5.2整数取值范围操作
整数的操作是有一个取值范围的,它的取值范围就是2的53次方。我们先用程序来看一下这个数字是什么.
1 | let a = Math.pow(2,53)-1; |
在我们计算时会经常超出这个值,所以我们要进行判断,ES6提供了一个常数,叫做最大安全整数,以后就不需要我们计算了。
最大安全整数
1 | console.log(Number.MAX_SAFE_INTEGER); |
最小安全整数
1 | console.log(Number.MIN_SAFE_INTEGER); |
安全整数判断isSafeInteger( )
1 | let a= Math.pow(2,53)-1; |