《你不知道的JavaScript(中卷)》讀書筆記

中卷有點無聊,不過也是有乾貨的,可是好像要背一下的樣子。不過做者大大都誇我是「優秀的開發人員」了,確定要看完呀~~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

 

最近心情浮躁,看不下去了。待續。

相關文章
相關標籤/搜索