一,变量声明: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里的constconst声明的变量是完全不可更改的。

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新增特性相关推荐

  1. 前端面试中常见的ES6新特性(一)

    文章目录 一.let 关键字 特性 let创建变量代码示例: 不允许重复声明: 块儿级作用域(局部变量): 不存在变量提升: 不影响作用域链: 应用场景: 二.const 关键字 特性 const创建 ...

  2. 【前端学习之路】ES6新特性 Promise基本方法 、async函数(阮一峰老师、小马哥_老师 课程笔记)

    1.Promise.then()方法 Promise 实例具有 then 方法,其第一个参数是 resolve 状态的回调函数,第二个参数是 reject 状态的回调函数,它们是可选的. then 方 ...

  3. 深度学习中的注意力机制(三)

    作者 | 蘑菇先生 来源 | NewBeeNLP原创出品 深度学习Attenion小综述系列: 深度学习中的注意力机制(一) 深度学习中的注意力机制(二) 目前深度学习中热点之一就是注意力机制(Att ...

  4. 吴恩达说“将引领下一波机器学习技术”的迁移学习到底好在哪?

    AI技术年度盛会即将开启!11月8-9日,来自Google.Amazon.微软.Facebook.LinkedIn.阿里巴巴.百度.腾讯.美团.京东.小米.字节跳动.滴滴.商汤.旷视.思必驰.第四范式 ...

  5. AI部署:聊一聊深度学习中的模型权重

    点击上方"3D视觉工坊",选择"星标" 干货第一时间送达 作者丨Oldpan 来源丨Oldpan博客 编辑丨极市平台 导读 本文简要介绍了模型权重的统计方法,以 ...

  6. 《因果学习周刊》第7期:因果学习中的离线策略评估

    No.07 智源社区 因果学习组 因 果 学  习 研究 观点 资源 活动 关于周刊 因果学习作为人工智能领域研究热点之一,其研究进展与成果也引发了众多关注.为帮助研究与工程人员了解该领域的相关进展和 ...

  7. 创新工场南京人工智能研究院执行院长冯霁:联邦学习中的安全问题

    近期,创新工场南京人工智能研究院执行院长冯霁做客雷锋网AI金融评论公开课,以"浅析联邦学习中的安全性问题"为题,详尽地讲解了联邦学习的特点.联邦学习的应用和安全防御对策等内容. 以 ...

  8. 干货|一文全解深度学习中的卷积

    来源:1024深度学习 概要:卷积现在可能是深度学习中最重要的概念.正是靠着卷积和卷积神经网络,深度学习才超越了几乎其他所有的机器学习手段. 译自Tim Dettmers的Understanding ...

  9. 鸟哥的linux 实训教程,鸟哥的Linux基础学习实训教程

    1.理想的Linux上机实践课程 每周一次.每次三小时的学与练 本书所有例题讲解,均经过鸟哥在大专院校实施多年来的测试,对于学生的理解具有相当满意的效果. 2. 提供一致性教学环境 让学习者不再有陌生 ...

  10. 深度学习中常见的损失函数

    文章来源于AI的那些事儿,作者黄鸿波 2018年我出版了<TensorFlow进阶指南 基础.算法与应用>这本书,今天我把这本书中关于常见的损失函数这一节的内容公开出来,希望能对大家有所帮 ...

最新文章

  1. 【最新】三位深度学习创始人共同获得了2019年公布的图灵奖
  2. 【Python】unicode' object is not callable
  3. windows磁盘分区
  4. 阿里云centos 6.3 安装宝塔nginx面板无法远程mysql数据库和无法FTP连接问题解决方法
  5. 【tensorflow】tf.layers.conv1d函数解析(一维卷积)
  6. UML模型中的图-静态图【类图、对象图】
  7. 西瓜书机器学习总结(一)
  8. Bootstrap列表组
  9. Infragistics netadvantage UltraGrid (UltraWinGrid) 编程手记
  10. CS 231n 学习笔记 03——课程3.1 损失函数
  11. 《通关!游戏设计之路》笔记(未整理完)
  12. 深度解析dubbo源码 (dubbo整体设计) (二)
  13. Windows配置maven环境变量
  14. EXCEL工作表保护密码破解
  15. 大内高手 调试手段及原理
  16. 基于canvas画布的星空效果
  17. 今天发现易宝(yeepay)充值卡类支付方式可能存在的安全漏洞!
  18. 网络安全学习(千锋网络安全笔记)2--IP与基本DOS命令
  19. 不通过twitter API获取Twitter数据的方法
  20. D55_BMS_IntefaceBoard_RevA接口板电路设计图

热门文章

  1. PDF上有黄色聊天小标记
  2. js判断电脑是否网络连接正常
  3. Windows下搭建MySQL Master Slave
  4. 怎么避免抖音小店虚假发货警告?四川万顿思
  5. 显示农历 php,php农历日历
  6. 组件和API使用,实现页面跳转
  7. 程序员精神崩溃怎么办?九大建议巧应对
  8. python关于cx_freeze用base=win32gui打包成无控制台应用程序不正常的解决办法。
  9. 【案例篇】DataOps崛起:数据治理需要重建!
  10. 微博视频发布软件原创视频素材哪里下载