中卷有点无聊,不过也是有干货的,可是好像要背一下的样子。不过做者大大都夸我是“优秀的开发人员”了,确定要看完呀~~react
开发人员以为它们太晦涩,很难掌握和运用,弊(致使bug)大于利(提升代码可读性)。这种观点我不敢苟同,由于本书的读者都是优秀的开发人员,成天与算法和代码打交道,“抽象相等”对各位来讲只是小菜一碟。算法
第一部分。(图片太大了,只能转pdf再转的png,好像有点变形)数组
数组经常使用方法函数
var new_array = old_array.concat(value1[, value2[, ...[, valueN]]]) : 把一个数组和任意多的对象或数组链接,不改变当前数组。新生成的数组对于合成数组是浅拷贝。this
let arr = [1, 2, 3] let arr1 = arr.concat('p', ['x', 'y']) // arr (3) [1, 2, 3] // arr1 (6) [1, 2, 3, "p", "x", "y"]
slice(begin, end): 返回一个从开始到结束(不包括结束)选择的数组的一部分浅拷贝到一个新数组对象。且原始数组不会被修改。spa
['q', 'w', 'e', 'r'].slice(1, 3) // ["w", "e"] ['q', 'w', 'e', 'r'].slice() // ["q", "w", "e", "r"] ['q', 'w', 'e', 'r'].slice(3) // ["r"]
array.splice(start[, deleteCount[, item1[, item2[, ...]]]]): 从start开始,删除deleteCount个元素,并添加元素item1...itemn。返回被删除的元素集合,会直接改变数组自己。3d
var myFish = ["angel", "clown", "mandarin", "surgeon"]; //从第 2 位开始删除 0 个元素,插入 "drum" var removed = myFish.splice(2, 0, "drum"); //运算后的 myFish:["angel", "clown", "drum", "mandarin", "surgeon"] //被删除元素数组:[],没有元素被删除
arr.join([separator]):将数组的每一个元素经过分隔符连起来,亲测应该是经过for (i: 0...length)这种方式遍历的,因此空元素也会被加上。code
parseInt的坑对象
parseInt( 0.000008 ); // 0 ("0" 来自于 "0.000008") parseInt( 0.0000008 ); // 8 ("8" 来自于 "8e-7") parseInt( false, 16 ); // 250 ("fa" 来自于 "false") parseInt( parseInt, 16 ); // 15 ("f" 来自于 "function..") parseInt( "0x10" ); // 16 parseInt( "103", 2 ); // 2
JavaScript 中的相等blog
下卷就是Promise和生成器。
Promise以前研究了一下,就不写了,生成器是一个新东西。以前在用react的时候,只以为field的用法很神奇,但彻底没注意函数前面的*。后来才知道是生成器。
1. 函数名前面加 * function *foo(x) {...}
2. 经过运行函数获得生成器,传参和普通函数同样。 var it = foo( 6 );
3. 调用 it.next() 函数开始运行
4. 函数运行到 yield 处会中止。
5. yield 的下一个 next(..) 传入的参数 是 yield 的返回值。注意,第一个next是不能传值的。
6. yield value 能够向next var res = next(..) 传递值。
function *foo(x) { var y = x * (yield 'zzz') return y } var it = foo(6) var res = it.next() console.log(res) // { value: 'zzz', done: false } res = it.next(7) console.log(res) // { value: 42, done: true }
迭代器。
iterable(可迭代),即指一个包含能够在其值上迭代的迭代器的对象。
iterable 必须支持一个函数,其名称是专门的 ES6 符号值 Symbol.iterator 。调用这个函数时,它会返回一个迭代器。一般每次调用会返回一个全新的迭代器,虽然这一点并非必须的。
数字序列生成器实现标准的迭代器接口
var something = (function() { var nextVal; return { [Symbol.iterator]: function() { return this; }, next: function() { if (nextVal === undefined) { nextVal = 1 } else { nextVal = (3 * nextVal) + 6 } return { done: false, value: nextVal } } } })() console.log(something.next().value) // 1 console.log(something.next().value) // 9 console.log(something.next().value) // 33 console.log(something.next().value) // 105
能够经过 for...of 循环带有迭代器的对象。
for (var v of something) { console.log(v) // 不要死循环! if (v > 500) { break } } // 1 9 33 105 321 969
当你执行一个生成器,就获得了一个迭代器。
生成器委托(感受就是,这样也能够?)语法就是 yield * foo(),如下代码输出 12345
function* foo() { console.log("*foo() starting"); yield 3; yield 4; console.log("*foo() finished"); } function* bar() { yield 1; yield 2; yield* foo(); yield 5; } var it = bar(); console.log(it.next().value) console.log(it.next().value) console.log(it.next().value) console.log(it.next().value) console.log(it.next().value) /** output */ 1 2 *foo() starting 3 4 *foo() finished 5
最近心情浮躁,看不下去了。待续。