波哥让我总结学习中遇到的ES6新增特性
一,变量声明:Let与const
ES6推荐使用Let
来声明变量,Let
提供块作用域(block-scoping),这会比var
提供的以函数为作用域有更加精细化的控制。请看下面例题
问:在下面程序中,控制台打印的最终结果?
function fn() {var arr = [];for (var i = 0; i < 5; i++) {arr.push(function(){return console.log(i);})}return arr;
}
for (let i = 0; i < 5; i++) {fn()[i]()
}
复制代码
你可能会误以为结果是[0,1,2,3,4]
,但实际却是[5,5,5,5,5]
用var
来定义一个变量,JavaScript
在预先编译的时候会将变量提升至函数的顶部,经过5个for
循环,arr
里面的i
会指向同一个i
,此时函数中的i
已经是5,所以最终结果也就是5了。
下面把for
循环的var
改为let
:
function fn() {var arr = [];for (let i = 0; i < 5; i++) {arr.push(function(){return console.log(i);})}return arr;
}
for (let i = 0; i < 5; i++) {fn()[i]()
}
复制代码
结果输出[0,1,2,3,4]
,因为let
拥有块作用域,所以使用let
声明的变量i
不会被提升到函数顶部,i
的作用域在for
循环, 就会每次循环有独立的值。
如果你想定义一个常量,请使用ES6里的const
,const
声明的变量是完全不可更改的。
const PI = 3.14;
PI = 1;
复制代码
结果是直接报错 Uncaught TypeError: Assignment to constant variable. at <anonymous>:3:4
关于let
与const有几个点需要注意
- let 关键词声明的变量不具备变量提升(hoisting)特性
- let 和 const 声明只在最靠近的一个块中(花括号内)有效
- 当使用常量 const 声明时,请使用大写变量,如:CAPITAL_CASING
- const 在声明时必须被赋值
二, 模板字符串
在ES6之前我们往往用+
来处理模板字符串
var str = 'I' + 'Have' + Num + 'Apple'
复制代码
而在ES6中基本的字符串格式化,将表达式嵌入字符串中进行拼接,用${}来界定;ES6反引号(``)直接搞定
var str = `I Have ${Num} Apple`
复制代码
三, 箭头函数(Arrow Functions)
ES6中,箭头函数是函数的一种简写形式 () = >
箭头函数最直观的三个特点
- 不需要
function
关键字来创建函数- 省略
return
关键字- 当你的函数有且仅有一个参数的时候,是可以省略掉括号的。当你函数返回有且仅有一个表达式的时候可以省略'{}' 和 'return';
//ES5
var fn = function(x){return x
}//ES6
var fn = (x) = >{return x
}//ES6简写
var fn = x => x
复制代码
四, 对象的遍历:for...in
//定义一个对象
var Apple = {color: "red",weight: "50g",kind:function(){console.log("HongFuShi")}
}//用for...in遍历对象
for(let item in Apple){console.log(Apple[item])
}
复制代码
五,ES6中的类class
ES6 中支持 class 语法,不过,ES6的class不是新的对象继承模型,它只是原型链的语法糖表现形式。
用class
创建对象的格式:
class 类名{constructor(参数){this.属性 = 参数;}method(){// 对象中简写方法,省略了function。不要与箭头函数搞混了}
}
复制代码
- 注意:ES6 中支持class语法,不过,ES6的class不是新的对象继承模型,它只是原型链的语法糖表现形式
- ES6 中支持 class语法,不过,ES6的class不是新的对象继承模型,它只是原型链的语法糖表现形式。
- 方法和方法之间没有逗号。不是键值对
在ES5中,我们创建一个类通常如下:
//创建一个构造函数
function Apple (color,weight) {this.color = color;this.weight = weight;
}
//向函数原型写入方法
Apple.prototype.getkind = function(){console.log('HongFuShi');
}
//创建新对象,并调用方法
var Apple = new Apple("red","50g");
console.log(Apple);
Apple.getkind();
复制代码
在ES6中我们可以用class
来声明一个类
//创建一个类
class Apple {//构造器constructor(color, weight) {this.color = color;this.weight = weight;}//类方法getkind(){console.log('HongFuShi');}
}
//创建新对象并调用属性方法
var new_Apple = new Apple("red","50g");
console.log(new_Apple);
Apple1.getkind()
复制代码
- 这里值得注意的是你new的对象名称不能与类的名称重复。
六,ES6里 类class
中的继承Extends
在ES5中我们继承属性是这样写的:
//创建Apple构造函数
function Apple (color,weight) {this.color = color;this.weight = weight;
}
//函数原型添加方法
Apple.prototype.getkind = function(){console.log('HongFuShi');
}
//创建Smell_Apple构造函数
function Smell_Apple (color,weight,smell) {Apple.call(this,color,weight); /利用call改变this指向,达到属性继承this.smell = smell;
}
//浅拷贝继承方法
for (const key in Apple.prototype) {Smell_Apple.prototype[key] = Apple.prototype[key]
}Smell_Apple.prototype.show = function(){console.log(`苹果的颜色是${this.color},重量是${this.weight},味道${this.smell}`);
}//调用继承后的构造函数
var new_Apple = new Smell_Apple("red","50g","good")
console.log(new_Apple);
new_Apple.getkind()
new_Apple.show();
复制代码
在ES6中我们可以使用Extends来继承:
//创建一个父类
class Apple {constructor(color, weight) {this.color = color;this.weight = weight;}getkind(){console.log('HongFuShi');}
}
//子类继承父类
class Smell_Apple extends Apple{constructor(color,weight,smell) {super(color,weight)this.smell = smell;}show(){console.log(`苹果的颜色是${this.color},重量是${this.weight},味道${this.smell}`);}
}let new_Apple = new Smell_Apple("red","50g","good");
console.log(new_Apple);
new_Apple.show();
复制代码
以上就是我目前接触到的ES6新增特性,谢谢波哥的查阅。
波哥让我总结学习中遇到的ES6新增特性相关推荐
- 前端面试中常见的ES6新特性(一)
文章目录 一.let 关键字 特性 let创建变量代码示例: 不允许重复声明: 块儿级作用域(局部变量): 不存在变量提升: 不影响作用域链: 应用场景: 二.const 关键字 特性 const创建 ...
- 【前端学习之路】ES6新特性 Promise基本方法 、async函数(阮一峰老师、小马哥_老师 课程笔记)
1.Promise.then()方法 Promise 实例具有 then 方法,其第一个参数是 resolve 状态的回调函数,第二个参数是 reject 状态的回调函数,它们是可选的. then 方 ...
- 深度学习中的注意力机制(三)
作者 | 蘑菇先生 来源 | NewBeeNLP原创出品 深度学习Attenion小综述系列: 深度学习中的注意力机制(一) 深度学习中的注意力机制(二) 目前深度学习中热点之一就是注意力机制(Att ...
- 吴恩达说“将引领下一波机器学习技术”的迁移学习到底好在哪?
AI技术年度盛会即将开启!11月8-9日,来自Google.Amazon.微软.Facebook.LinkedIn.阿里巴巴.百度.腾讯.美团.京东.小米.字节跳动.滴滴.商汤.旷视.思必驰.第四范式 ...
- AI部署:聊一聊深度学习中的模型权重
点击上方"3D视觉工坊",选择"星标" 干货第一时间送达 作者丨Oldpan 来源丨Oldpan博客 编辑丨极市平台 导读 本文简要介绍了模型权重的统计方法,以 ...
- 《因果学习周刊》第7期:因果学习中的离线策略评估
No.07 智源社区 因果学习组 因 果 学 习 研究 观点 资源 活动 关于周刊 因果学习作为人工智能领域研究热点之一,其研究进展与成果也引发了众多关注.为帮助研究与工程人员了解该领域的相关进展和 ...
- 创新工场南京人工智能研究院执行院长冯霁:联邦学习中的安全问题
近期,创新工场南京人工智能研究院执行院长冯霁做客雷锋网AI金融评论公开课,以"浅析联邦学习中的安全性问题"为题,详尽地讲解了联邦学习的特点.联邦学习的应用和安全防御对策等内容. 以 ...
- 干货|一文全解深度学习中的卷积
来源:1024深度学习 概要:卷积现在可能是深度学习中最重要的概念.正是靠着卷积和卷积神经网络,深度学习才超越了几乎其他所有的机器学习手段. 译自Tim Dettmers的Understanding ...
- 鸟哥的linux 实训教程,鸟哥的Linux基础学习实训教程
1.理想的Linux上机实践课程 每周一次.每次三小时的学与练 本书所有例题讲解,均经过鸟哥在大专院校实施多年来的测试,对于学生的理解具有相当满意的效果. 2. 提供一致性教学环境 让学习者不再有陌生 ...
- 深度学习中常见的损失函数
文章来源于AI的那些事儿,作者黄鸿波 2018年我出版了<TensorFlow进阶指南 基础.算法与应用>这本书,今天我把这本书中关于常见的损失函数这一节的内容公开出来,希望能对大家有所帮 ...
最新文章
- 【最新】三位深度学习创始人共同获得了2019年公布的图灵奖
- 【Python】unicode' object is not callable
- windows磁盘分区
- 阿里云centos 6.3 安装宝塔nginx面板无法远程mysql数据库和无法FTP连接问题解决方法
- 【tensorflow】tf.layers.conv1d函数解析(一维卷积)
- UML模型中的图-静态图【类图、对象图】
- 西瓜书机器学习总结(一)
- Bootstrap列表组
- Infragistics netadvantage UltraGrid (UltraWinGrid) 编程手记
- CS 231n 学习笔记 03——课程3.1 损失函数
- 《通关!游戏设计之路》笔记(未整理完)
- 深度解析dubbo源码 (dubbo整体设计) (二)
- Windows配置maven环境变量
- EXCEL工作表保护密码破解
- 大内高手 调试手段及原理
- 基于canvas画布的星空效果
- 今天发现易宝(yeepay)充值卡类支付方式可能存在的安全漏洞!
- 网络安全学习(千锋网络安全笔记)2--IP与基本DOS命令
- 不通过twitter API获取Twitter数据的方法
- D55_BMS_IntefaceBoard_RevA接口板电路设计图