ES6新特性之解构、参数、模块和记号用法示例


Posted in Javascript onApril 01, 2017

本文实例讲述了ES6新特性之解构、参数、模块和记号用法。分享给大家供大家参考,具体如下:

一、解构

解构提供了一个方便的地从对象或数组中提取数据的方法,请看下面的例子:

//ES6
let [x,y]=[1,2];//x=1,y=2
//ES5
var arr=[1,2];
var x=arr[0];
var y=arr[1];

使用这个语法,可以一次性给多个变量赋值。一个很好的附加用处是可以很简单的交换变量值:

let x=1,y=2;
[x,y]=[y,x];x=2 y=1

解构也可以用于对象,注意对象中必须存在的对应的键:

let obj={x:1,y:2};
let {x,y}=obj;//a=1,b=1

或者

let {x:a,y:b}=obj;//a=1,b=2

另一个有趣的模式是模拟多个返回值:

function doSomething(){
   return [1,2];
}
let [x.y]=doSomething();//x=1.y=2

解构可以用来为参数对象赋默认值。通过对象字面量,可以模拟命名参数:

function doSomething({y:1,z:0}){
   console.log(y,z);
}
doSomething({y:2})

二、参数

1、默认值

在ES6中,可以定义函数的参数默认值。语法如下:

function doSomething(){
   return x*y;
}
doSomething(5);//10
doSomethinf(5,undefined);//10
doSomething(5,3);//15<br><br>//ES5中给参数赋默认值<br>function doSomething(x,y){<br>y=y===undefined?2:y;<br>return x*y;<br>}

传递undefined或不传参数时都会触发参数使用默认值。

2、REST参数

前面我们已经学习了省略号操作符,剩余参数和它很类似,它同样是使用‘...'语法,允许你把末尾的参数保存在数组中:

funtion doSomething(x,...remaining){
  return x*rremaining.length;
}
dodSomething(5,0,0,0);//15

三、模块

在ES6的模块语法中,模块设计围绕export和import关键词,现在让我们看一个包含两个模块的例子:

//lib/ath.js
export function sum(x,y){
  return x+y
};
export var pi=3.14;
//app.js
import {sum,pi}form"lib/math.js";
console.log(sum(pi,pi);

正如你所见,可以存在多个export声明,每个都要明确的指出输出值得类型。本例中的import声明使用一种语法,来明确定义被导入的内容,可以使用*通配符,结合as关键词给模块提供一个本地名称,把模块当成一个整体导入:

//app.js
import*as math form"lib/math.js";
console.lgo(math.sum(math.pi,math.pi));

模块系统有一个default输出,它可以是一个函数,只需要提供一个本地名称就可以导入这个默认值:

//lib/my-fn.js
export default function(){
  console.log('echo echo);
}
//app.js
import doSomething from 'lib/my-fn,js';
doSomething();

请注意import声明是同步的,但是模块代码需在所有依赖加载完后才会运行

四、类

类的创建围绕calss和constructor关键词,以下是个简短的示例:

class Vehicle{
   constructor(name){
     this.name=name;
     this.kind=''Vehicle";
   }
  getName(){
     return this.name;
  }
};
//Create an instance
let myVehicle=new Vehicle('rocky');

注意类的定义不是一般的对象,因此,类的成员间没有逗号。创建一个类的对象时,需要使用new关键词,继承一个基类时,使用extends:

class Car extends Vehicle{
   constructor(name){
      super(name);
      this.kind='car';
   }
}
let myCar=new Car('bumpy');
myCar.getName();//'bumpy';
myCar instanceof Car;//true
myCar instanceof Vehicle;//true

从衍生类中,你可以使用从任何构造函数或方法中使用super来获取它的基类:使用super()调用父类构造函数;调用其他成员。

五、记号

记号是一个新的原生数据的类型,像Number和String一样,你可以使用记号为对象属性创建唯一标示或创建唯一的常量。创建方法如下:

const MY_CONSTANT=Symbol();
let obj={};
obj[MY_CONSTANT]=1;

注意通过记号产生的键值对不能通过Object.getOwnPorpertyNames()获得,在for...in遍历、Object.key()、JSON.stringify()中均不可见,这是与基于字符串的键相反的,你可以通过Object.getOenPropertySymbols()获取一个对象的记号数组。记号与const配合很合适,因为它们都有不可改变的特性。

转译

现在浏览器对ES6的支持还不广泛,且个浏览器也各不相同,可能你写的代码在用户的浏览器中还不能完全解析,这就是我们为什么需要把代码转换成能在当前的任何浏览器中良好运行的旧版本JavaScript(ES5),这种转换通常称为转译,我们必须要这么做,知道所有我们想兼容的浏览器都能运行ES6为止。转译的方法有很多种,包括Bable、Traceur、TypeScript等。

希望本文所述对大家ECMAScript程序设计有所帮助。

Javascript 相关文章推荐
父页面显示遮罩层弹出半透明状态的dialog
Mar 04 Javascript
JS+CSS实现感应鼠标渐变显示DIV层的方法
Feb 20 Javascript
jQuery实现鼠标划过修改样式的方法
Apr 14 Javascript
在html中引入外部js文件,并调用带参函数的方法
Oct 31 Javascript
干货!教大家如何选择Vue和React
Mar 13 Javascript
AngularJS动态绑定ng-options的ng-model实例代码
Jun 21 Javascript
JS实现图片放大镜插件详解
Nov 06 Javascript
详解vue-cli脚手架build目录中的dev-server.js配置文件
Nov 24 Javascript
一种angular的方法级的缓存注解(装饰器)
Mar 13 Javascript
一些你可能不熟悉的JS知识点总结
Mar 15 Javascript
javascript实现前端分页功能
Nov 26 Javascript
vue项目支付功能代码详解
Feb 18 Vue.js
jQuery UI Grid 模态框中的表格实例代码
Apr 01 #jQuery
前端自动化开发之Node.js的环境搭建教程
Apr 01 #Javascript
ES6新特性之数组、Math和扩展操作符用法示例
Apr 01 #Javascript
手机端转换rem适应
Apr 01 #Javascript
ES6新特性之变量和字符串用法示例
Apr 01 #Javascript
ES5学习教程之Array对象
Apr 01 #Javascript
jq checkbox 的全选并ajax传参的实例
Apr 01 #Javascript
You might like
经典的星际争霸,满是回忆的BGM
2020/04/09 星际争霸
Docker 如何布置PHP开发环境
2016/06/21 PHP
php使用PDO获取结果集的方法
2017/02/16 PHP
兼容IE和FF的js脚本代码小结(比较常用)
2010/12/06 Javascript
javascript获取函数名称、函数参数、对象属性名称的代码实例
2014/04/12 Javascript
使用jquery动态加载js文件的方法
2014/12/24 Javascript
jquery 设置style:display的方法
2015/01/29 Javascript
jQuery height()、innerHeight()、outerHeight()函数的区别详解
2016/05/23 Javascript
javascript ES6中箭头函数注意细节小结
2017/02/17 Javascript
微信小程序商城项目之淘宝分类入口(2)
2017/04/17 Javascript
IE11下使用canvas.toDataURL报SecurityError错误的解决方法
2017/11/19 Javascript
vue路由传参页面刷新参数丢失问题解决方案
2019/10/08 Javascript
微信小程序搜索框样式并实现跳转到搜索页面(小程序搜索功能)
2020/03/10 Javascript
如何实现echarts markline标签名显示自己想要的
2020/07/20 Javascript
[06:43]2018DOTA2国际邀请赛寻真——VGJ.Thunder
2018/08/11 DOTA
Python切换pip安装源的方法详解
2016/11/18 Python
取numpy数组的某几行某几列方法
2018/04/03 Python
python解析json串与正则匹配对比方法
2018/12/20 Python
python3获取当前目录的实现方法
2019/07/29 Python
Python reversed函数及使用方法解析
2020/03/17 Python
Pytorch实现将模型的所有参数的梯度清0
2020/06/24 Python
python中加背景音乐如何操作
2020/07/19 Python
CSS3之边框多颜色Border-color属性使用示例
2013/10/11 HTML / CSS
纯css3制作网站后台管理面板
2014/12/30 HTML / CSS
高一自我鉴定
2013/12/17 职场文书
房产销售经理职责
2013/12/20 职场文书
情人节活动策划方案
2014/02/27 职场文书
奥巴马竞选演讲稿
2014/05/15 职场文书
新课培训心得体会
2014/09/03 职场文书
结婚老公保证书
2015/02/26 职场文书
给朋友的道歉短信
2015/05/12 职场文书
民事上诉状范文
2015/05/22 职场文书
运动会口号霸气押韵
2015/12/24 职场文书
心理学培训心得体会
2016/01/22 职场文书
PYTHON 使用 Pandas 删除某列指定值所在的行
2022/04/28 Python
postgresql中如何执行sql文件
2023/05/08 PostgreSQL