ES5只有两种变量声明的方法,分别是var
与function
关键字。ES6相比ES5多了let
、const
、import
、class
这四个关键字。
最早的ES5使用var
、function
这两个关键字声明的变量会触发变量声明提前,这个大家都很熟悉。但是ES6新增的let
、const
这两个块级作用域的变量声明关键字则不会。
let
在代码块内,使用let
关键字声明变量之前,该变量都是不可使用的,也就是在这个代码块内,只要声明的该变量,但是在该变量声明之前调用了,就会报错。这在语法上称为“暂时性死区(参照阮一峰的ES6入门,见下例:)。”
{
console.log(b); //ReferenceError
let b = 123;
}
const
使用const
关键字声明变量的作用域也是块级作用域,但是const
与let
还是有着非常明显的区别的:使用let
关键字声明的变量,它的值可以改变;使用const
关键字声明的变量,它的值可以改变,但是变量所指向的内存中的地址是不可改变的。
{
const a = {
p: 123,
d: 234
}
a.f = 345;
}
上述代码是不会出错的。但是如下操作是会报错的:
{
const a = {
a: 123
}
a = { // TypeError: Assignment to constant variable
b: 234
}
}
这个就是改变了常量a在内存中的地址。
import
import 是用于在一个模块中加载另一个含有export的模块。写法如下:
import React from 'react';
或
import React, { Component } from 'react';
前面的这个React
实际是自己定义的一个要引入文件的名称,也就相当于声明变量。这个就是引入react模块并命名为React,从react中引入React以及Component。
class
es6引入了class(类)这个概念,使其看起来更加像传统的面向对象的语言例如java或者C++。通过class
关键字,可以定义类(声明或定义了一个对象)。
class Person() {
}
类里面还有构造方法(constructor),这个就不在这里描述了。