读(深入浅出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")返回falsefunction 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/非常不错的系列教程

原创粉丝点击