日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

es6重点笔记:数值,函数和数组

發布時間:2023/11/29 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 es6重点笔记:数值,函数和数组 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

本篇全是重點,撿常用的懟,數值的擴展比較少,所以和函數放一起:

一,數值

1,Number.EPSILON:用來檢測浮點數的計算,如果誤差小于這個,就無誤

2,Math.trunc():取整,去除小數部分,如果是-0.123,去除之后會留下-0,這個要注意

其他感覺用的都不多,就這兩個。

?

二,函數:

1,es6引入了rest參數:...變量名,它跟arguments的區別,它是真正的數組

2,箭頭函數:

函數體內的this對象就是定義時所在的對象,不是使用時所在的對象;

不可以當做構造函數,即不可以使用new

不可以使用arguments對象,在函數體內不存在,如果要用,可以用rest參數

不可以使用yield命令,不能用作Generator函數。

3,尾調用

指某個函數的最后一步調用另一個函數,注意,這里是只return一個函數,而不是什么表達式之類的

function f(x) {return g(x); }  

尾調用優化:

函數在調用的時候會形成一個“調用幀”,在內存中形成一個“調用記錄”,保存調用位置和內部變量,如果此時在函數A中再調一個函數B,那么在A的調用幀的上方就會形成一個B的調用幀,只有當B函數執行結束返回到A的時候,B的調用幀才會消失,也就是說當B在執行的時候,只要B函數的下方還有程序要執行,A的調用幀就一直占用著,因為要等B執行完成后繼續執行,同樣,如果此時B里面還有一個函數C,那么執行函數C的時候,B的調用幀也要被占著,A的也是,那這樣內存就會有很大的損耗,形成了一個“調用棧”。

如果函數B是函數A的最后一步調用呢,那么執行函數B的時候,A的調用幀就會自動消失,因為B就是它的最后一步,函數A不需要再記錄它的調用位置和內部變量了,所以只留下了B函數的調用幀,同樣,如果C函數也是B函數的最后一步,那么調用C函數的時候,B函數的調用幀也會消失,原因同上,所以這極大地減少了內存的占用。

綜上:“尾調用優化”本質就是只保留內層函數的調用幀,每次執行函數的時候調用幀只有一個,大大節省內存。

比如遞歸的時候,非常消耗內存,因為需要同時保存著N多個調用幀,所以很容易發生“棧溢出”的錯誤。但如果改成“尾遞歸”,調用幀只有一個,所以不會發生“棧溢出”的問題。

function factorial(n) {if (n===1) return 1;return n * fatorial(n-1); }// n如果過大就容易棧溢出,現在改成尾遞歸function factorial(n, total) {if (n===1) return total;return factorial(n-1, n*total); }// 調用幀永遠只有一個,極大減少內存占用

?

?三,數組

1,擴展運算符:三個點(...),就是rest參數的逆運算,將一個數組轉為用逗號分隔的參數序列。

?

2,Array.from():用于將兩類對象轉換成數組,類數組對象(比如NodeList和arguments)和可遍歷對象(Iterator Object),它還可以接受第二個參數,作用類似于map,對數組的每一項進行操作,然后將結果返回到數組。

?

3,Array.of():用于將一組值轉換成數組,括號里面傳的參數組成的數組,哪怕只有一個數,也是一個元素的數組,在es5里面,Array方法如果只傳一個數字,默認就是數組的長度,但是Array.of()不一樣,傳一個數字就表示一個數字的數組。

?

4,find():找出第一個符合條件的數組成員,參數是回調函數,這里非常容易寫成元素,要注意寫條件,沒有則返回undefined,用法如下:

[1, 4, -5, 10].find((n) => n<0)// -5[1, 5, 10, 15].find(function(value, index, arr) {return value > 9 })// 10

  

?

5,findIndex():找出第一個符合條件的數組成員的位置,參數也是回調函數,沒有則返回-1,用法同上

?

(所以如果要使用數組查找某個元素是否存在,還是用es7的includes()比較好,但是要注意使用babel的transform-runtime這個plugin)

?

6,數組實例的entries(),keys(),values():

返回的都是一個Iterator Object,也就是說可以用iterator object.next().value來依次訪問,

entries是對鍵值對的遍歷,keys是對鍵的遍歷,values是對值的遍歷,

注意,不要和Object的三個同名方法搞混了,那個是es7的!

?

7,數組實例的includes(),(這里我寫錯地方了,這個是es7的)

數組是否包含某個元素,有就返回true,沒有就false,可以傳NaN來檢測NaN。es5的indexOf無法檢測NaN

?

8,數組的空位

es5對數組的空位處理:

? forEach,filter,every,some都會跳過空位,

? map會跳過空位,但是會保留這個值,

? join和toString會將空位設為undefined,而undefined和null會被處理成字符串

es6則是明確將空位轉為undefined,所以盡量不要留空位

?

 

?

轉載于:https://www.cnblogs.com/yanchenyu/p/7884284.html

總結

以上是生活随笔為你收集整理的es6重点笔记:数值,函数和数组的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。