ES6/ES2015,,在ES5的基础上扩展了很多新的功能,在使用的时候要慎重,因为有一部分js代码在部分浏览器是不兼容的,但是所有写在服务器端的代码基本上都支持ES6的写法.
新特性:
一.开启严格模式
在函数的第一行加上"use strict"字符串,如果需要整个js代码中开启,就在js第一行加上这一段字符.
设置"严格模式"的目的,主要有:
- 清除javascript语法的一些不合理,不严谨之处,减少怪异行为
- 清楚代码运行的一些不安全之处,保证代码运行的安全.
- 提高编译效率,增加运行速度
- 为未来新版本的javascript做好铺垫.
注意:
在正常模式下可以直接使用为未声明的变量 严格模式不行
name="jhon";
console.log(name);
//输出jhon
在正常模式下一个方法可以有很多个同名参数 严格模式不行
function fn(aa,aa,bb){
return aa+aa+bb;
}
console.log(fn("11","22","33"));
//输出222233
二.定义变量使用let(类似var)
javascript中的var:
- var声明的变量会有变量提升
- var没有块级作用域
- var可以多次重复定义一个变量
这些声明在后天开发语言是不允许的,为了规范变量的声明ES6退出了新的关键字let代替var的声明变量.
let的特点:
- let声明的变量不会有变量提升
- let存在块级作用域
- let不能多次重复定义变量
三.定义常量const
常量是指不会改变的数据.
常量const的特点:
- 值不能再改变
- 常量具有块级作用域
- 不要在块级作用域中声明常量
- 没有变量提升,要先声明后使用
- 不可以声明同名的常量
- 一定要赋初始值,否则会报错
- 如果声明的是常量是一个对象,只要对象的地址不改变,其内部的属性可以改变
四.字符串的扩展
如果要判断字符串”hello word”中是否存在”word”,用字符串中的方法只有indexOf,在ES6中又为我们提供了其它的方法:
- includes()->返回布尔值,用于判字符串是否包含某些字符串
- startsWith()->返回布尔值,用于判断字符串是否以某些字符开头
- endWith()->返回布尔值,用于判断字符串是否以缪谢字符结尾.有两个参数(字符串,数值)->("o",3)用于判断下标3的字符串是否是"0".
- repeat()->传入一个数字,将字符串重复数字对应的次数返回.
注意:传入的是正小数,数字会被向下取整;传入字符串类型的数值("5"),可以,传入("5a")不可以当空处理;不能传入负数.
五.模块语法:"模块字符串"
结构:`模板内容${code}`
注意:code可以是变量,方法名,js表达式
1 //变量
2 let name='jack';
3 let temp=`我叫${name}`;
4 //temp==>我叫jack
5
6
7 //表达式
8 let a=1;
9 let b=1;
10 let temp=`a+b的和是$(a+b)`;
11 //temp==>2
12
13 //方法
14 function getName(){
15 return 'jack';
16 }
17 let temp=`我叫${getName()}`;
18 //temp==>jack
六.箭头函数 0=>{}
为了方便书写,es6规定了一种新的写法来简化匿名函数:去掉function改为=>,结构为()=>{}
过程一:去掉function关键字
arr.each(function(m,n){
console.log(n)
});
得到:arr.each((m,n)=>{console.log(n);});
过程二:如果只有一句代码可以去掉大括号和return关键字
得到: arr.each((m,n)=>console.log(n));
过程三:如果参数只一个,可以将参数中的小括号去掉。
得到: arr.each(n=>console.log(n))
过程四:如果代码只有一句,并且代码中return,可以去掉return.
得到: arr.sort((n,m)=>n-m);
注意:箭头函数没有固定的写法,它是根据当前方法的参数和方法的返回值来的
箭头函数中this指向问题:
-
箭头函数没有自己的this,函数体内部写的this,会顺着作用域去找最近真实存在的this。
-
箭头函数内部的this是定义时所在的对象,而不是使用时所在的对象,并且不会改变。
- 箭头函数不能作为构造函数
-
箭头函数中不存在arguments,箭头函数中的argument指向的是外层的arguments.
未完,待续...