读(深入浅出ES6)系列笔记(一)
来源:互联网 发布:大淘宝联盟如何注册 编辑:程序博客网 时间:2024/05/17 02:52
二、迭代器和for-of循环
1、之前我们可以用for循环等遍历数组。ES5后,我们可以用forEach和for-in遍历数组
(1)forEach遍历数组:不能使用break语句中断循环或使用return语句返回到外层函数。(2)for-in循环:赋给index的值是字符串而不是实际的数字,会遍历自定义属性,随机顺序(3)for-of循环避开了for-in循环的所有缺陷、可以正确响应break、continue和return语句(4)for-of循环不支持普通对象,但如果你想迭代一个对象的属性,你可以用for-in循环(这也是它的本职工作)或内建的Object.keys()方法:
// 向控制台输出对象的可枚举属性for (var key of Object.keys(someObject)) { console.log(key + ": " + someObject[key]);}
2、使用for…of遍历的本质是调用Iterator接口
(1)原生具备Iterator接口:数组、某些类似数组的对象、Set和Map结构。(2)在Symbol.iterator的属性上部署遍历器生成方法(原型链上的对象具有该方法也可)可被for...of循环
三:生成器 Generators
1、生成器函数特点
(1)使用function*声明。 (2)类似return的语法:关键字yield。普通函数只可以return一次,而生成器函数可以yield多次。在生成器的执行过程中,遇到yield表达式立即暂停,后续可恢复执行状态。 (3)生成器其函数体内标记为yield的点会暂停。调用生成器对象的.next()方法时,函数调用将其自身解冻并一直运行到下一个yield表达式,再次暂停。
2、构建与迭代相关的工具
假设你需要一个等效于Array.prototype.filter并且支持DOM NodeLists的方法,可以这样写:function* filter(test, iterable) { for (var item of iterable) { if (test(item)) yield item; }}
四:模板字符串
1、反撇号(`)
(1)模板占位符中的代码可以是任意JavaScript表达式,所以函数调用、算数运算等这些都可以作为占位符使用,你甚至可以在一个模板字符串中嵌套另一个,我称之为模板套构(template inception)。(2)如果这两个值都不是字符串,可以按照常规将其转换为字符串。例如:如果action是一个对象,将会调用它的.toString()方法将其转换为字符串值。(3)如果你需要在模板字符串中书写反撇号,你必须使用反斜杠将其转义:`\``等价于"`"。同样地,如果你需要在模板字符串中引入字符$和{。无论你要实现什么样的目标,你都需要用反斜杠转义每一个字符:`\$`和`\{`。(4)与普通字符串不同的是,模板字符串可以多行书写:例:$("#warning").html(` <h1>小心!>/h1> <p>未经授权打冰球可能受罚 将近${maxPenalty}分钟。</p>`);模板字符串中所有的空格、新行、缩进,都会原样输出在生成的字符串中。${user.name}和${action}被称为模板占位符
五:不定参数和默认参数
1、.不定参数之(..needles语法)
(1)不定参数前的所有参数都正常填充,任何“额外的”参数都被放进一个数组中并赋值给不定参数。(2)如果没有额外的参数,不定参数就是一个空数组,它永远不会是undefined。例:检查一个字符串中是否包含若干个子串。containsAll("banana", "b", "nan")返回true,containsAll("banana", "c", "nan")返回false。function containsAll(haystack, ...needles) { for (var needle of needles) { if (haystack.indexOf(needle) === -1) { return false; } } return true;}
2、默认参数
默认值表达式在函数调用时自左向右求值。这也意味着,默认表达式可以使用该参数之前已经填充好的其它参数值。:例:function animalSentenceFancy(animals2="tigers", animals3=(animals2 == "bears") ? "sealions" : "bears"){ return `Lions and ${animals2} and ${animals3}! Oh my!`;}现在,animalSentenceFancy("bears")将返回“Lions and bears and sealions. Oh my!”。传递undefined值等效于不传值,所以animalSentence(undefined, "unicorns")将返回“Lions and tigers and unicorns! Oh my!”。没有默认值的参数隐式默认为undefined,所以function myFunc(a=42, b) {...}是合法的,并且等效于function myFunc(a=42, b=undefined) {...}
本文主要是读迷你书所属的深入浅出ES6系列文章而做的笔记,详细教程请阅读原文:
http://www.infoq.com/cn/es6-in-depth/非常不错的系列教程
阅读全文
0 0
- 读(深入浅出ES6)系列笔记(一)
- 读(深入浅出ES6)系列笔记(二)
- 读(深入浅出ES6)系列笔记(三)
- ES6深入浅出(一)
- 深入浅出ES6(一)
- 深入浅出ES6(一):ES6是什么
- 深入浅出ES6(一):ES6是什么
- 深入浅出ES6(一):ES6是什么
- 深入浅出ES6(一):ES6是什么
- 《ES6深入浅出》学习笔记(一)
- ES6笔记(一)
- es6学习系列---(一)
- ES6学习笔记(一)
- ES6入门笔记(一)
- ES6学习笔记(一)
- ES6学习笔记(一)
- AngularJS系列之ES6特性(一)
- ES6系列(一)->定义变量
- websocket
- SVM算法原理
- 环信-(php)服务器端REST API
- 64_常用类_自动装箱和拆箱_缓存处理
- idea 报错:[2016-08-31 09:20:10,763] Artifact xxx:war exploded: Error during artifact deployment.
- 读(深入浅出ES6)系列笔记(一)
- 解密回声消除技术之二(应用篇)
- COMSOL Multiphysics
- msleep 不能用在atomic context,但是mdelay 可以
- 电商后台设计
- 将真分数分解为埃及分数
- 客户端Android平台开发规范
- applicationContext.xml配置
- IE11下载文件文件名出现乱码