【微信小程序 | 实战开发】ES5、ES6概述和新特性介绍

简介: 【微信小程序 | 实战开发】ES5、ES6概述和新特性介绍

ES5、ES6概述和新特性介绍


写在前面:什么是ES,我们需要学什么?



ES全称ECMAScript它是一种由ECMA组织(前身欧洲计算机制

造商协会)制定和发布的脚本语言规范。


而我们学的JavaScript是ECMA的实现,但术语JavaScript和ECMAScript平时表达的是一个意思


JS包括三个部分


1).ECMAScript(核心)

2)扩展==》浏览器端

BOM(浏览器对象模型)

DOM(文档对象模型)

扩展==》服务器端


Node

ES的几个重要版本


ES5:09年发布

ES6(ES2015):15年发布,也称为ECMA2015(引入严格模式、JSON,扩展对象、数组、原型、字符串、日期方法)

ES7(ES2016):16年发布,也称为ECMA2016(模块化、面向对象语法、Promise、箭头函数、let、const、数组解构赋值等等,相比ES5变化不大)


一、ES5简介:


ECMAScript 5.1 (或仅 ES5) 是ECMAScript(基于JavaScript的规范)标准最新修正。 与HTML5规范进程本质类似,ES5通过对现有JavaScript方法添加语句和原生ECMAScript对象做合并实现标准化。ES5还引入了一个语法的严格变种,被称为”严格模式(strict mode)”。


二、浏览器支持


Opera 11.60
     Internet Explorer 9*
        //ie10才支持严格模式  可以用es5shim处理兼容问题
     Firefox 4
     Safari 5.1**
     Chrome 13
     兼容ie8: es5-shim
      https://www.npmjs.com/package/es5-shim


三、ES5的严格模式 ‘use strict’

  给作者提供了选择一个限制性更强语言变种的方式

       1. 消除不安全之处,保证安全运行

       2. 提升编译效率

       3. 未来发展趋势


     规则:


   

1)变量先定义在使用
        2)不允许变量重名
          var a=1;
          function a(){}
        3)不允许使用eval
        4)不允许delete
        4)不允许with语句
          var sMessage = "hello";
          with(sMessage) {alert(toUpperCase());}


四、JSON

JSON.parse、JSON.stringify


五、Json对象扩展

新增方法


   

Object.getPrototypeOf //__proto__(不推荐使用)===Object.getPrototypeOf
         [].__proto__===Object.getPrototypeOf([]);
       Object.create
         var o=Object.create({})
         var o=Object.create({},{
           p: {
             value: 42,
             writable: true,
             enumerable: true,
             configurable: true
           }
         })
       Object.keys和 for_in 一模一样,不遍历其父级的属性
       Object.defineProperty //vue2响应式原理
         var obj={id:1};
         Object.defineProperty(obj,'_id',{
           get:function(){return this.id},
           set:function(newVal){this.id=newVal*100}
         })
         obj._id=11;console.log(obj);
       Object.defineProperties


六、ES5_数组扩展


新增方法


Array.prototype.indexOf
        Array.prototype.lastIndexOf
        Array.prototype.every
        Array.prototype.some
        Array.prototype.forEach
        Array.prototype.map
        Array.prototype.filter


七、Function.prototype.bind


bind会返回一个函数,不会立即执行
  call 立即执行   (window,1,2,3)
  apply 立即执行  (window,[1,2,3])


ES6简介


ES6, 全称 ECMAScript 6.0 ,是 JavaScript 的下一个版本标准,2015.06 发版。

ES6 主要是为了解决 ES5 的先天不足,比如 JavaScript 里并没有类的概念,但是目前浏览器的 JavaScript 是 ES5 版本,大多数高版本的浏览器也支持 ES6,不过只实现了 ES6 的部分特性和功能。


一、let 关键字


let 关键字用来声明变量,使用 let 声明的变量有几个特点:

1) 不允许重复声明

2) 块儿级作用域

3) 不存在变量提升

4) 不影响作用域链


应用场景:以后声明变量使用 let 就对了


二、const 关键字


const 关键字用来声明常量,const 声明有以下特点


声明必须赋初始值

标识符一般为大写

不允许重复声明

值不允许修改

块儿级作用域

注意: 对象属性修改和数组元素变化不会出发 const 错误

应用场景:声明对象类型使用 const,非对象类型声明选择 let


三、.模板字符串


模板字符串(template string)是增强版的字符串,用反引号(`)标识,特点:


字符串中可以出现换行符

可以使用 ${xxx} 形式输出变量


// 定义字符串
let str = `<ul>
<li>沈腾</li>
 <li>玛丽</li>
 <li>魏翔</li>
 <li>艾伦</li>
 </ul>`;
// 变量拼接
let star = '王宁';
let result = `${star}在前几年离开了开心麻花`;


注意:当遇到字符串与变量拼接的情况使用模板字符串


四、箭头函数


ES6 允许使用「箭头」(=>)定义函数。


/**
* 1. 通用写法
*/
let fn = (arg1, arg2, arg3) => {
 return arg1 + arg2 + arg3;
}

箭头函数的注意点:


如果形参只有一个,则小括号可以省略

函数体如果只有一条语句,则花括号可以省略,函数的返回值为该条语句的

执行结果

箭头函数 this 指向声明时所在作用域下 this 的值

箭头函数不能作为构造函数实例化

不能使用 arguments


/**
* 2. 省略小括号的情况
*/
let fn2 = num => {
 return num * 10;
};
/**
* 3. 省略花括号的情况
*/
let fn3 = score => score * 20;
/**
* 4. this 指向声明时所在作用域中 this 的值
*/
let fn4 = () => {
 console.log(this);
}
let school = {
 name: '郝苗苗',
 getName(){
 let fn5 = () => {
 console.log(this);
 }
 fn5();
 }
};


注意:箭头函数不会更改 this 指向,用来指定回调函数会非常合适


五、rest 参数

ES6 引入 rest 参数,用于获取函数的实参,用来代替 arguments


/**
* 作用与 arguments 类似
*/
function add(...args){
 console.log(args);
}
add(1,2,3,4,5);
/**
* rest 参数必须是最后一个形参
*/
function minus(a,b,...args){
 console.log(a,b,args);
}
minus(100,1,2,3,4,5,19);


注意:rest 参数非常适合不定个数参数函数的场景


六、Promise


Promise 是 ES6 引入的异步编程的新解决方案。语法上 Promise 是一个构造函数,

用来封装异步操作并可以获取其成功或失败的结果。


Promise 构造函数: Promise (excutor) {}

Promise.prototype.then 方法

Promise.prototype.catch 方法


七、Set


ES6 提供了新的数据结构 Set(集合)。它类似于数组,但成员的值都是唯

一的,集合实现了 iterator 接口,所以可以使用『扩展运算符』和『for…of…』进行遍历,集合的属性和方法:


size 返回集合的元素个数
add 增加一个新元素,返回当前集合
delete 删除元素,返回 boolean 值
has 检测集合中是否包含某个元素,返回 boolean 值
clear 清空集合,返回 undefined
//创建一个空集合
let s = new Set()
//创建一个非空集合
let s1 = new Set([1,2,3,1,2,3]);
//集合属性与方法
//返回集合的元素个数
console.log(s1.size);
//添加新元素
console.log(s1.add(4));
//删除元素
console.log(s1.delete(1));
//检测是否存在某个值
console.log(s1.has(2));
//清空集合
console.log(s1.clear());


八、class 类


ES6 提供了更接近传统语言的写法,引入了 Class(类)这个概念,作为对

象的模板。通过 class 关键字,可以定义类。基本上,ES6 的 class 可以看作只是

一个语法糖,它的绝大部分功能,ES5 都可以做到,新的 class 写法只是让对象

原型的写法更加清晰、更像面向对象编程的语法而已。


知识点:


class 声明类
constructor 定义构造函数初始化
extends 继承父类
super 调用父级构造方法
static 定义静态方法和属性
父类方法可以重写
//父类
class Phone {
 //构造方法
 constructor(brand, color, price) {
 this.brand = brand;
 this.color = color;
 this.price = price;
 }
 //对象方法
 call() {
 console.log('我可以打电话!!!')
 } }
//子类
class SmartPhone extends Phone {
 constructor(brand, color, price, screen, pixel) {
 super(brand, color, price);
 this.screen = screen;
 this.pixel = pixel;
 }
 //子类方法
 photo(){
 console.log('我可以拍照!!');
 }
 playGame(){
 console.log('我可以玩游戏!!');
 }
 //方法重写
 call(){
 console.log('我可以进行视频通话!!');
 }
 //静态方法
 static run(){
 console.log('我可以运行程序')
 }
 static connect(){
 console.log('我可以建立连接')
 } }
 //实例化对象
const Nokia = new Phone('诺基亚', '灰色', 230);
const iPhone6s = new SmartPhone('苹果', '白色', 6088, 
'4.7inch','500w');
//调用子类方法
iPhone6s.playGame();
//调用重写方法
iPhone6s.call();
//调用静态方法
SmartPhone.run();


九、模块化

模块化是指将一个大的程序文件,拆分成许多小的文件,然后将小文件组合起来。


模块化的好处

模块化的优势有以下几点:


防止命名冲突

代码复用

高维护性

模块化规范产品


ES6 之前的模块化规范有:


CommonJS => NodeJS、Browserify

AMD => requireJS

CMD => seaJS

目录
相关文章
|
9月前
|
小程序
培训报名小程序实战开发2
培训报名小程序实战开发
|
2月前
|
Web App开发 小程序 安全
支付宝小程序性能概述
支付宝小程序性能概述
65 11
|
2月前
|
移动开发 小程序 容器
家校互通小程序实战开发02首页搭建
家校互通小程序实战开发02首页搭建
|
2月前
|
小程序 安全 测试技术
家校互通小程序实战开发01需求分析
家校互通小程序实战开发01需求分析
|
9月前
|
小程序 前端开发 JavaScript
培训报名小程序实战开发 1
培训报名小程序实战开发
|
10月前
|
JSON 小程序 前端开发
微信小程序开发系列 (二) :微信小程序的单步调试和控制器实现步骤概述
微信小程序开发系列 (二) :微信小程序的单步调试和控制器实现步骤概述
|
小程序 定位技术 API
幼儿园小程序实战开发教程(终篇)
幼儿园小程序实战开发教程(终篇)
幼儿园小程序实战开发教程(终篇)
|
小程序 安全 定位技术
幼儿园小程序实战开发教程
幼儿园小程序实战开发教程
幼儿园小程序实战开发教程
|
小程序 定位技术 容器
幼儿园小程序实战开发教程04
幼儿园小程序实战开发教程04
幼儿园小程序实战开发教程04
|
小程序 前端开发 容器
幼儿园小程序实战开发教程(下篇)
幼儿园小程序实战开发教程(下篇)
幼儿园小程序实战开发教程(下篇)