ECM6新语法学习(二) 作者: Asser 时间: 2016-11-15 分类: 阅读:次 ### 函数部分 #### 关于函数的默认参数 > 在es6中支持js函数在参数中直接设置默认参数 function aaa(x = 5, y = 6) { return [x, y]; // [5,6] } > 但是需要注意的是,一旦设置了默认参数,函数的length会发生改变。因为函数的length是指预期传入参数的个数。并且假如默认参数不是尾参数的话,默认参数之后的参数都不会计入length中 function aaa(x, y=6) { return [x, y]; } aaa.length; // 1 function bbb(x=6, y) { return [x, y]; } bbb.length #### rest参数 > rest参数是指函数的参数使用...(参数)的形式,获取函数的多个参数,可以不用再使用arguments对象 function aaa(...values) { let sum = 0; for(let a of values) { sum += a; } return sum; } aaa(1, 2, 3) // 6 #### 拓展运算符... > 拓展运算符可以看作为rest的逆运算,可以将数组中的各个元素,转化成逗号分隔的参数序列 var arr = [1,2,3]; function f(x, y, z){ // code } // es5 f.apply(null, arr); // es6 f(...arr); > 在涉及到32位unicode字符串操作时,直接用字符串.length js会出现判断错误的情况。但是假如使用[...target_str].length就不会出现问题 > 在实现了iterator接口的所有结构,使用...都可以将其转变成一个真正的数组.比如nodelist > 但是如下图所示的类数组对象由于不含有iterator接口所以无法被...转化成数组。替代它的是Array.from()方法 var arr = { "0" : "a", "1" : "b", "2" : "c", "length" : 3 }; Array.from(arr); // ["a", "b", "c"] #### generator(生成器)函数 > 语法: function* name (args){} > 描述:(个人理解)生成器函数可以在运行中退出,并且在下一次进入时,上一次运行函数的环境仍然保存。 > 具体: 运行生成器函数会生成一个可迭代(具有iterator接口)的返回对象,并每次执行该对象的next(),生成器就会执行到下一个"yield"并停止(个人认为,yield等同于生成器函数中的return)或被yield*委派到另一个生成器函数。yield返回的对象拥有一个value属性,表示它产出的值和一个done属性,表示它是否已经运行到最后。 function*aaa() { var index = 0; while (index < 3) { yield index ++ ; } } gen = aaa(); gen.next(); Object {value: 0, done: false} gen.next(); Object {value: 1, done: false} gen.next(); Object {value: 2, done: false} gen.next(); Object {value: undefined, done: true} ###未完待续 标签: none 相关文章推荐 上一篇: 代码规范 下一篇: Redux个人理解(一)