使用ES6新特性开发微信小程序(1)

ECMAScript 6(简称ES6)是JavaScript语言的最新标准。因为当前版本的ES6是在2015年发布的,所以又称ECMAScript 2015。

微信小程序支持绝大部分ES6的新增特性。

Constants(常量)

ES6新增了const关键字,用来声明常量,一旦声明,常量的值就不能改变了。

const PI = 3.141593;    
console.log(PI);
PI = 3; // 报错: Uncaught TypeError: Assignment to constant variable.
const PI = 3.1; // 报错: Uncaught SyntaxError: Identifier 'PI' has already been declared

const只在声明所在的块级作用域内有效。

Scoping(作用域)

ES6新增了let关键字,用来声明变量,但声明的作用只在代码块内有效。

{
    let a = 10;
    var b = 1;
}    
console.log(a); // 报错: Uncaught ReferenceError: a is not defined
console.log(b); // 输出: 1

上面代码在代码块之中,分别用let和var声明了两个变量。然后在代码块之外调用这两个变量,结果let声明的变量报错,var声明的变量返回了正确的值。这表明,let声明的变量只在它所在的代码块有效。

for (let i = 0; i < 5; i++) {
    console.log(i);
}    
console.log(i) // 报错: ReferenceError: i is not defined

上面代码的计数器i,只在for循环体内有效。

let为JavaScript新增了块级作用域。

function test() {
    let x = 1;        
    let y = 2;
    {
        let x = 10;            
        let y = 20;
    }        
    console.log(x, y);
}
test(); // 输出: 1 2

上面的函数有两个代码块,都声明了变量x, y,运行后输出1 2。这表示外层代码块不受内层代码块的影响。如果使用var定义变量n,最后输出的值就是10 20。

Arrow Functions(箭头函数)

箭头函数是ES6在语法上提供的一个很好的特性,其特点有:

  • 语法更为简洁了。
  • 文法上的固定this对象。

一个参数

let square = (x) => x * x;    
console.log('5 * 5 = ', square(5)); // 输出: 5 * 5 =  25

多个参数

let add = (x, y) => x + y;    
console.log('2 + 3 = ', add(2, 3)); // 输出: 2 + 3 =  5
let total = () => square(add(5, 3));    
console.log(
    '(5 + 3)*(5 + 3) = ', total()); // 输出: (5 + 3)*(5 + 3) =  64

数组遍历

var array = [1, 2, 3];
array.forEach(v => console.log(v)); // 输出: 1 2 3
var bob = {
    _name: "Bob",
    _friends: ['Tom', 'Jerry'],
    printFriends() {       
        this._friends.forEach(f =>             
            console.log(this._name + " knows " + f));
    }
}
bob.printFriends(); // 输出: Bob knows Tom Bob knows Jerry

Extended Parameter Handling(参数的扩展)

允许为函数的参数设置默认值,即直接写在参数定义的后面。

function logName(name = 'Unknown') {
    console.log('Name: ', name);
}
logName(); // 输出:Unknown
logName('JavaScript'); // 输出:JavaScript

Rest不定参数(用”….”表示)是在函数中使用命名参数同时接收不定数量的未命名参数。

function add(...numArray) {
    let sum = 0;        
    for (let num of numArray) {
    sum += num;
}        
    return sum;
}    
console.log(add(1, 2, 3)); // 输出:6console.log(add(1, 2, 3, 4, 5)); // 输出:15

Spread操作符和Rest不定参数一样,都使用 “…” 表示,Spread操作符允许我们将数组中的参数一个一个传入函数中。

function add(x, y, z) {
    return x + y + z;
}    
console.log(add(...[1, 2, 3])); // 输出:6
console.log(add(...[3, 4, 5])); // 输出:12

原文发布于微信公众号 - 极乐技术社区(wxapp-union)

原文发表时间:2016-12-28

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Ryan Miao

String.split()用法以及特殊分隔符注意,ps:|

转载:http://www.cnblogs.com/mingforyou/archive/2013/09/03/3299569.html 在java.lang包...

3039
来自专栏liulun

Nim教程【十四】

网友@沉没捕鱼,赞助了一台服务器 这个系列的教程写完之后,我们就要开始着手搭建Nim的社区了~ 异常 Nim中的异常类型是对象类型 根据惯例,Nim中的异常类型...

2326
来自专栏Ryan Miao

Java String.split()用法小结

在java.lang包中有String.split()方法,返回是一个数组 我在应用中用到一些,给大家总结一下,仅供大家参考: 1、如果用“.”作为分隔的话,必...

33911
来自专栏Golang语言社区

【Go 语言社区】Go学习笔记:json处理

Encode 将一个对象编码成JSON数据,接受一个interface{}对象,返回[]byte和error: func Marshal(v interfac...

64812
来自专栏阮一峰的网络日志

co 函数库的含义和用法

======================================== 以下是《深入掌握 ECMAScript 6 异步编程》系列文章的第三篇。 ...

3345
来自专栏小詹同学

Python系列之——字符串格式化(xiaozhan is a boy of 22 years old.)

不知道小伙伴有没有遇到过字符串输出有格式要求的情况呢?今天小詹学习分享一波python的字符串格式化的方法。学以致用,首先我们得明确为什么要格式化字符串输出,以...

702
来自专栏飞雪无情的博客

Go语言参数传递是传值还是传引用

其实对于传值和传引用,是一个比较古老的话题,做研发的都有这个概念,但是可能不是非常清楚。对于我们做Go语言开发的来说,也想知道到底是什么传递。

1893
来自专栏GreenLeaves

JS框架设计之对象类型判断一种子模块

Javascript有两套数据类型,一套是基础数据类型,一套是对象数据类型。基础数据类型包括5种基本数据类型,分别是null,bool,undefined,nu...

1968
来自专栏iOS122-移动混合开发研究院

【读书笔记】A Swift Tour

素材:A Swift Tour 推荐下载Playground:Download Playground objc 自己较为熟悉,想熟悉下风头正劲的 swift。就...

3588
来自专栏Golang语言社区

Go语言学习之cgo(golang与C语言相互调用)

几乎所有的编程语言都有C语言的影子,当然golang也不例外。可以看到golang的创始者们与c language有着密切的联系。所有,golang和c语言的相...

5447

扫码关注云+社区

领取腾讯云代金券