ES6语法的学习与实践

  ES6是JavaScript语言的新一代标准,是ECMAScript的第六个版本,加入了很多新的功能和语法,在很多框架,如在使用Vue,React等框架的项目中一般都采用ES6语法来编写的,下面对经常用到的ES6语法做简要的介绍。

  1.let,const

  let和const是ES6中新增的两个关键字,用来生命变量,let和const都是块级作用域。let声明的变量只在let命令所在的代码块内有效。const声明一个只读变量,一旦声明,常量的值就不可更改。与var声明的变量不同,var声明的是函数作用域,且存在变量提升。例如: 

 1 // let示例
 2 {
 3   var a=1;
 4 
 5   let b=2;
 6 }
 7 a;  // 1
 8 b;  // ReferenceError:b is not undefined.
 9 
10 // const示例
11 const c=3;
12 c=4; //  Assignment to constant variable.
13 
14 // var 示例
15 console.log(d); // undefined
16 var d=3;
17 console.log(d); //3
18 声明提前后浏览器执行顺序为:
19 var d;
20 console.log(d); // undefined
21 d=3;
22 console.log(d); // 3

  2.箭头函数

  ES6允许使用“箭头”(=>)定义函数。这种函数创建的函数不需要函数关键字,并且还可以省略return关键字。与此同时,箭头函数内的this指向函数定义时所在的上下文对象。例如:

 1 var foo1=(a,b)=>a 1;
 2 // 等价于 
 3 var foo1=function(a,b){
 4   return a b;
 5 }
 6 // 在return只有一个表达式时,使用箭头函数可以省略return和{}
 7 
 8 var name='jhon';
 9 var obj={
10   name:"tom",
11   sayName1:function(){
12     setTimeout(function(){
13       console.log(this.name)
14     },500)
15   },
16  sayName2:function(){
17     setTimeout(()=>{
18       console.log(this.name)
19     },500)
20   },
21 }
22 obj.sayName1(); // jhon
23 obj.sayName2(); // tom
24 // 第一个this值window对象,第二个方法里面指向当前的obj对象,

  小结:1.使用箭头函数可以简写代码量;2.可以改变this的指向,可以替代apply,call,bind一些方法。

  3.模板字符串

  相信许多小伙伴在js里面用‘’, 拼接字符串很让人头疼了,如果字符串量比较少还好,一旦比较多,最后拼的自己都不认识了,而且严重影响代码的整洁优雅度。ES6的反引号(``)标识字符串,除了可以当做普通字符串使用外,还可以用来定义多行字符串,以及在字符串内嵌入变零,功能很强大。例如:

 1 // 普通字符串
 2 `Hello World`
 3 
 4 // 多行字符串
 5 `Hello World,
 6   Hello JavaScript!
 7 `
 8 // 字符串内嵌入变量
 9 let name='Peer';
10 `Hello,${name}`

  4.解构赋值

  ES6允许按照一定模式从数组和对象中提取值,对变量进行赋值,这被称为解构。例如:

  

 1 // 数组解构
 2 var [a,b,c]=[1,2,3];
 3 a //1
 4 b //2
 5 c //3
 6 
 7 // 对象解构
 8 let name='Peer';
 9 let age=23;
10 let person={name,age};
11 person //{name:"Peer",age:23}
12 
13 // 函数的参数也可以使用解构赋值,例如:
14 // 数组的参数解构
15 function sum([x,y]){
16   return x y;
17 }
18 sum([1,2]); // 3
19 // 对象的参数解构
20 function sum2({x,y}){
21   return x y;
22 }
23 sum2({x:5,y:6}); // 11
24 
25 // 解构同样适用于嵌套的数组与对象
26 // 嵌套数组解构
27 let [a,[b],c]=[1,[2],3]
28 a; //1
29 b; //2
30 c: //3
31 // 嵌套对象解构
32 let {person:{name,age},foo}={person:{name:"Peer",age:23},foo:"foo"}
33 name;  // "Peer"
34 age;  // 23
35 foo; // "foo"

  小结:对象和数组的解构只需和声明好的对象数组形式保持一致即可,在获取对象里面的属性值还是很方便的,在Vue,React等框架的开发中也用的比较多,如:import { a , b , c } from 'component',所以不难理解这段代码,就是把component这个模块里面的啊,a,b,c属性对应的值取出来再分别赋值给a,b,c变量,确实大大简化了代码,提高了开发效率。

5.rest参数

  rest打开软件翻译为:休息; 剩余部分; 支持物; 宁静,安宁。ES6引入rest参数(形式为...变零名)用于获取多数的多余参数,以替代arguments对象的使用。rest参数是一个数组,数组中的元素是多余的参数。例如:

1 function printName(a,...names){
2   console.log(a);
3   console.log(names)
4 }
5 printName("Peer","jhon","toom")
6 // Peer
7 //["jhon", "toom"]

6.扩展运算符

  扩展运算符是三个点(...),它将一个数组转为用逗号分隔的参数序列,类似于rest参数的逆运算。例如:

1 function sum(a,b,c){
2   return a b c;
3 }
4 sum(...[1,2,3])
5 // 6

7.import ,export

  ES6实现了自己的模块化表标准,在语言层面上实现了模块化,它逐渐取代了CommonJS和AMD规范。ES6的模块功能主要有两个关键字构成:export和import。export用于规定模块对外暴露的接口,import用于引入其他模块提供的接口。例如:

// a.js
const a=function(){return 'this is a.js'
}
export default a;
// b.js
const b=function(){return 'this is b.js'
}
export {b}
// c.js
import a from './a';
import {b} from './b';
console.log(a,b); // 'this is a.js', 'this is b.js'

 小结:ES6的模块化解决了JavaScript没有模块化系统的缺陷,同时也使得各个模块相互独立,有独立的作用域。

8.Class

 1 // 定义一个类
 2 class Person{
 3   constructor(name,age){
 4     this.name=name;
 5     this.age=age;
 6   }
 7   getName(){
 8     return this.name;
 9   }
10 }
11 var person=new Person("Peer",23);
12 
13 // 通过extends 关键字实现继承
14 class Man extends Person{
15   constructor(anme,age){
16     super(name,age)
17   }
18   getGender(){
19     return 'male'
20   }
21 }
22 var man=new Man("Peer",23);
23 man.getName(); //Peer
23 console.dir(man);

  从打印man对象的结构来看,getGender是Man原型的方法,getName是Man继承Person的构造方法,man.getName()方法首先再man.__proto__的原型上查找,如果没有就在man.__proto__.proto__上查找,于是一级一级就构成了作用域链。

  话说好记性不如烂笔头,书写文章也是自我反思与总结的过程。以上就是个人在项目开发中用的比较多的地方分享给大家,不足之处,多多指正。

参考书籍:《React进阶之路》,《深入浅出Webpack》

 

 

 


更多专业前端知识,请上 【猿2048】www.mk2048.com

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/365875.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

这是一次 docker 入门实践

前言 其实接触 docker 也有一段时间了,但是一直没有做下总结,现在网上关于 docker 的介绍也有很多了,本着好记性不如烂笔头的原则,还是自己再记录一波吧。 实现目标 安装 docker ce 探索 docker 基本概念及用法环境准备 Centos7 6…

html dom概念,js学习之HTML DOM的一些基础概念

经过近一个星期,总算把w3chool上的HTML DOM的实例差不多看了一遍,因为本身对其中的很多都用过,所以看起来也很快,现在就再系统的回顾下HTML DOM的一些概念和基础的东西,大部分都是从w3school上看到的什么是DOMDOM是w3c(万维网联盟)的标准DOM定义了访问HTML和XML的标准"W3C…

关于Java垃圾收集

本文讨论的是使用的最受欢迎的框架之一带来的开销–我敢打赌,几乎没有应用程序不使用java.util.Collections。 本文基于以下事实:框架为例如集合的初始大小提供了默认值。 因此,我们有一个假设,即大多数人不会费心地自行管理其收…

ansys命令流_ANSYS命令流建模3之划分单元+施加弹簧

以马蹄形隧道为例,本文介绍如何添加荷载等隧道如上图所示!设置线单元材料属性,划分单元(二衬单元)lsel,s,,,1,6 !LSEL,Type,Item,Comp,VMIN, VMAX,VINClATT,1,1,3 !给线单元付材料号、实常数、单元类型号 LATT, MAT, REAL, TYPE, ESYSMSHKEY,1 …

Linux 系统中用户切换(su user与 su - user 的区别)

1,su命令 (su为switch user,即切换用户的简写) 格式:su -l USERNAME(-l为login,即登陆的简写,其中l可以省略) 如果不指定USERNAME(用户名),默认即…

正则表达式常用方法

RegExp对象中的方法 1,test()方法用于检测一个字符串是否匹配某个模式,如果字符串中含有匹配的文本,则返回 true,否则返回 false。 reg规定匹配以a开头的字符串,利用test进行测试,字符串str满足reg匹配规则…

python安装哪个版本好啊_windows10安装哪个版本的Python?

python2除了一些大公司历史遗留问题还在使用,目前中小创公司使用最多的是python3 大公司的一些新项目也开始用python3了 目前来说,python3.5以上的版本都可以 目前使用最多的是python3.7(建议你安装这个) 最新的是python3.8&#…

mongose + express 写REST API

一、准备工具 先确保电脑已经安装好nodejs 1.mongoose;安装非常简单: npm install mongoose --save 【mongoose封装了mongodb的方法,调用mongoose的api可以很轻松的对mongodb进行操作】 2.express;npm install express --save …

js实现html模板继承,理解JavaScript中的原型和继承

本文主要讲了原型如何在JavaScript中工作,以及如何通过[Prototype]所有对象共享的隐藏属性链接对象属性和方法;以及如何创建自定义构造函数以及原型继承如何工作以传递属性和方法值。介绍JavaScript是一种基于原型的语言,这意味着对象属性和方…

骁龙660是32位还是64位_高通发布骁龙 7c/8c 芯片,以后你可能会在电脑上看到它...

高通的芯片生意早已不局限于移动设备领域,而是进一步深入至 PC 市场。相比强调性能的 X86 芯片,以高通骁龙为代表的 ARM 系芯片则希望突出自己的优势,即更长的电池续航、无风扇设计和全天候的蜂窝网络连接。在骁龙技术峰会的第三天&#xff0…

css3之盒模型

什么是盒模型? css中的每个元素都是一个盒模型, 包括html body元素, 浏览器解析css的时候也会把每个元素看成一个盒子来解析。 盒模型具备的属性有: content 、padding 、margin、border 、background等 盒模型的分类&#xff1…

学计算机的误解,让人误解的六大专业

原标题:让人误解的六大专业隔行如隔山,很多人喜欢看名字猜专业,所以导致很多大学专业被人误解。其实了解一个专业不能仅仅凭借它的名字,也不能断章取义,只取片面意思。接下来就让我们来了解一下有哪些被人误解的专业吧…

杂项:轮询

ylbtech-杂项:轮询1.返回顶部 1、轮询(Polling)是一种CPU决策如何提供周边设备服务的方式,又称“程控输出入”(Programmed I/O)。轮询法的概念是,由CPU定时发出询问,依序询问每一个周…

js和css实现手机横竖屏预览思路整理

实现效果,如上图。 首先,实现手机页面在PC端预览, 则先在网上找到一个手机的背景图片,算好大概内间距,用来放预览的页面,我这里是给手机预览页面的尺寸按iphone5的尺寸来的; 一个手机页面在这里…

thinkphp日志泄漏漏洞_【Windows高危漏洞预警】CVE20200601,影响关键加密功能

一、事件报告2020年伊始,NSA发现了一个影响Microsoft Windows加密功能的严重漏洞(CVE-2020-0601)。证书验证漏洞允许攻击者破坏Windows验证加密信任的方式,并且可以启用远程代码执行。该漏洞会影响Windows 10和Windows Server 2016/2019以及依赖Windows的…

第一章计算机网络概述答案,第一章 计算机网络概述[3]

1-07 试在下列条件下比较电路交换和分组交换。要传送的报文共x(bit)。从源站到目的站共经过k段链路,每段链路的传播时延为d(s),数据率为b(b/s)。在电路交换时电路的建立时间为S(s)。在分组交换时分组长度为p(bit),且各结点的排队等待时间可忽…

最小路径算法(Dijkstra算法和Floyd算法)

1.单源点的最短路径问题:给定带权有向图G和源点v,求从v到G中其余各顶点的最短路径。 我们用一个例子来具体说明迪杰斯特拉算法的流程。 定义源点为 0,dist[i]为源点 0 到顶点 i 的最短路径。其过程描述如下: 步骤dist[1]dist[2]di…

matlab tsai手眼标定程序代码_标定系列一 | 机器人手眼标定的基础理论分析

旷视MegMaster机器人系列是旷视自主研发的一系列AI智能机器人硬件设备,基于旷视全球领先的人工智能算法及机器人技术,可实现搬运、分拣、托举、存储等功能,被广泛应用于物流仓储、工厂制造等场景。旷视SLAM组主要负责多传感器建图、定位、标定…

Java8中的外观(JavaFX8)

JavaFX8在外观方面进行了一些更改 ,其中最相关的是新CSS API ,它允许您为控件以及已公开的Skin类创建新CSS属性和伪类。 使用CSS可以改变控件的很多外观,但是CSS只能实现很多功能,而这正是Skin类的用处。从“ UI控件体系结构”快…

600分理科选计算机专业,天津600分左右,计算机或电子信息专业,怎么选院校?...

原标题:天津600分左右,计算机或电子信息专业,怎么选院校?想学计算机或电子信息,一定是偏理选科对吧!所谓的换算,是指的高考后出了全天津市不分文理的总排名后,如何换算成相当于天津市…