ES6目前基本为业界的标准,普及速度比ES5快很多,谷歌浏览器和火狐浏览器以及可以支持ES6中的绝大多数的特性。
1.新增变量声明:const、let
ES6推荐使用let:1>声明局部变量,2>没有提上之说,3>变量不能重名,相比之前的var(无论声明在何处,都会被视为声明函数的最顶部)
在for循环中,let效果实际上是利用了闭包的机制,并且,对于循环块中的let 和 执行块中的let是两个块中分别定义的变量,互不影响。
var x = '全局变量';
{
let x = '局部变量';
console.log(x); // 局部变量
}
console.log(x); // 全局变量
for (let i = 0; i < 2; i++) {
let i = 'foo'
console.log(i);
} // foo foo
const声明的常量,在声明时必须赋值,若const为对象,对象所包含的值时可以修改的,但对象所指向的地址没有改变。两者都为块级作用域。
const student = { name: 'cc' }
student.name = 'yy';// 不报错
student = { name: 'yy' };// 报错
2.模板字符串
1>ES6基本的字符串格式化。将表达式嵌入字符串中进行拼接。用${}来界定;
2>ES6反引号(``)直接搞定;
$("body").html(`This demonstrates the output of HTML content to the page,
including student's ${name}, ${seatNumber}, ${sex} and so on.`);
3.箭头函数(简写形式)
1>不需要function关键字来创建函数
2>省略return关键字
3>继承当前上下文的this关键字
4>箭头函数不能用关键字new调用
若函数只有一个参数时,可以省略括号,当函数返回只有一个表达式,可以省略{}和return
// ES5
var add = function (a, b) {
return a + b;
};
// 使用箭头函数
var add = (a, b) => a + b;
// ES5
[1,2,3].map((function(x){
return x + 1;
}).bind(this));
// 使用箭头函数
[1,2,3].map(x => x + 1);
//闭包:函数节流、防抖
function outer (){
return function(){return 123};}
//ES6箭头函数
const outer1 = () =>()=>123;
4. 函数的参数的默认值
// ES6之前,当未传入参数时,text = 'default';在函数体中进行定义
function printText(text) {
text = text || 'default';
console.log(text);
}
// ES6;在定义参数时直接给出参数的默认值
function printText(text = 'default') {
console.log(text);
}
printText('hello'); // hello
printText();// default
5.二进制和八进制字面量
ES6支持二进制和八进制的字面量,通过在数字前面添加0O或者0o即可将其转化为八进制。通过0B或0b转化为二进制:
let oValue = 0o10;
console.log(oValue); // 8
let bValue = 0b10; // 二进制使用 `0b` 或者 `0B`
console.log(bValue); // 2
5. 对象和数组结构
// 对象的结构
const student = {
name: 'Sam',
age: 22,
sex: '男'
}
// ES5;
const name = student.name;
const age = student.age;
const sex = student.sex;
console.log(name + ' --- ' + age + ' --- ' + sex);
// ES6
const { name, age, sex } = student;
console.log(name + ' --- ' + age + ' --- ' + sex);
//函数调用传参
//ES6新增语法:强制结构
//obj和obj1不相等,因为在内存地址不同
var obj = {
a:1,
b:2,
c:3
}
var obj1 = {
...obj
}
// 数组的结构
const [a,b,c] = ['Sam', 'yam', 'tom'];
//剩余参数,只能用于最后一个元素使用,包括最后所有数据
const [a,b,...c] = ['Sam', 'yam', 'tom','bob'];
const student = ['Sam', 'yam', 'tom'];
7.ES6 中的类
ES6支持class语法,它不是新的对象继承模型,它只是原型链的语法表现形式。
class Student {
constructor() {
console.log("I'm a student.");
}
study() {
console.log('study!');
}
static read() {
console.log("Reading Now.");
}
}
console.log(typeof Student); // function
let stu = new Student(); // "I'm a student."
stu.study(); // "study!"
stu.read(); // "Reading Now."
- 类的声明不会提升,如果你要使用某个 Class,那你必须在使用之前定义它,否则会抛出一个 ReferenceError 的错误
- 在类中定义函数不需要使用 function 关键词