Fork me on GitHub

ECMAScript

ECMAScript6

ECMAScript简称就是ES,你可以把它看成是一套标准,JavaScript就是实施了这套标准的一门语言 现在主流浏览器使用的是ECMAScript5

1. 作用域变量

作用域就是一个变量的作用范围。也就是你声明一个变量以后,这个变量可以在什么场合下使用,以前只有全局作用域和函数作用域。

if (true) {
var a = “a”; // 期望a是某一个值
} console.log(a);

1.2 块级作用域

在用var定义变量的时候,变量是通过闭包进行隔离的,现在用了let,不仅仅可以通过闭包隔离,还增加了一些块级作用域隔离。 块级作用用一组大括号定义一个块,使用 let 定义的变量在大括号的外面是访问不到的

if(true){
let name = ‘zfpx’; }

console.log(name);// ReferenceError: name is not defined

2.1 解析数组

解构意思就是分解一个东西的结构,可以用一种类似数组的方式定义N个变量,可以将一个数组中的值按照规则赋值过去。

var [name,age] = [‘zfpx’,8]; console.log(name,age);

2.2 解构对象

对象也可以被解构

var obj = {name:’zfpx’,age:8};

//对象里的name属性的值会交给name这个变量,age的值会交给age这个变量

var {name,age} = obj; console.log(name,age);

3.1 模板字符串

模板字符串用反引号(数字1左边的那个键)包含,其中的变量用${}括起来

var name = ‘zfpx’,age = 8; let desc = ${name} is ${age} old!;
console.log(desc);

//所有模板字符串的空格和换行,都是被保留的

var str = <ul> <li>a</li> <li>b</li> </ul>; console.log(str);

其中的变量会用变量的值替换掉

4.1 函数定义

ES6允许使用“箭头”(=>)定义函数。 箭头函数简化了函数的的定义方式,一般以 “=>” 操作符左边为输入的参数, 而右边则是进行的操作以及返回的值

inputs=>output

var double = v => v*2;

上面的箭头函数等同于

var double = function(v) { return v*2; };

如果箭头函数不需要参数或需要多个参数,就使用一个圆括号代表参数部分。

var fn = () => 100;

如果箭头函数的代码块部分多于一条语句,就要使用大括号将它们括起来,并且使用return语句返回。

var add = (a,b) => a+b;

4.3 this指针

箭头函数根本没有自己的this,导致内部的this就是外层代码块的this 正是因为它没有this,从而避免了this指向的问题

var person = {
name:’zfpx’,
getName:function(){
//在浏览器执行的话this指向window
setTimeout(function(){console.log(this);},1000);
//在浏览器执行的话this指向person
setTimeout(() => console.log(this),1000);
} } person.getName();

5.1 对象字面量

如果你想在对象里添加跟变量名一样的属性,并且属性的值就是变量表示的值就可以直接在对象里加上这些属性

let name = ‘zfpx’; let age = 8; let getName = function(){
console.log(this.name); } let person = {
name,
age,
getName
} person.getName();

6.1 class

使用class这个关键词定义一个类,基于这个类创建实例以后会自动执行constructor方法,此方法可以用来初始化

class Person {
constructor(name){
this.name = name;
}
getName(){
console.log(this.name);
} } let person = new Person(‘zfpx’); person.getName();

6.2 继承extends

一个类可以去继承其它的类里的东西

class Person { constructor(name){
this.name = name; } }

class Teacher extends Person{
constructor(name,age){
super(name);
this.age = age;
} } var teacher = new Teacher(‘zfpx’,8); console.log(teacher.name,teacher.age);

6.4 get与set

getter可以用来得获取属性,setter可以去设置属性

class Document {
constructor(){
this.cookies = [];
}
set cookie(cookie){
this.cookies.push(cookie);
}
get cookie(){
return this.cookies;
} } let document = new Document(); document.cookie = ‘name=zfpx’; document.cookie = ‘age=6’; console.log(document.cookie);

7. 模块

模块功能主要由两个命令构成:export和import

export命令用于规定模块的对外接口
import命令用于输入其他模块提供的功能。

7.1 导出

一个模块就是一个独立的文件。该文件内部的所有变量,外部无法获取。如果你希望外部能够读取模块内部的某个变量,就必须使用export关键字输出该变量。

export var name = ‘zfpx’;
export var age = 8;
var name = ‘zfpx’; var
age = 8; export {name,age};

7.2 导入

使用export命令定义了模块的对外接口以后,其他JS文件就可以通过import命令加载这个模块(文件)

import {name,age} from ‘./person.js’;
console.log(name,age);

7.3 在页面中引用(不支持es6模块化时可以引入下面三个插件)

traceur.js
BrowserSystem.js
bootStrap.js

7.4 默认导出

使用import命令的时候,用户需要知道所要加载的变量名或函数名,否则无法加载。 为了给用户提供方便,让他们不用阅读文档就能加载模块,就要用到export default命令,为模块指定默认输出 此模块的默认输出是一个函数

export default function say(){
console.log(‘say’); }

其他模块加载该模块时,import命令可以为该匿名函数指定任意名字。

import say from ‘./person.js’;


-------------本文结束感谢您的阅读-------------