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

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/392297.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/392297.shtml
英文地址,請注明出處:http://en.pswp.cn/news/392297.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

SMSSMS垃圾郵件檢測器的專業攻擊

Note: The methodology behind the approach discussed in this post stems from a collaborative publication between myself and Irene Anthi.注意&#xff1a; 本文討論的方法背后的方法來自 我本人和 Irene Anthi 之間 的 合作出版物 。 介紹 (INTRODUCTION) Spam SMS te…

php pdo 緩沖,PDO支持數據緩存_PHP教程

/*** 作者&#xff1a;初十* QQ&#xff1a;345610000*/class myPDO extends PDO{public $cache_Dir null; //緩存目錄public $cache_expireTime 7200; //緩存時間&#xff0c;默認兩小時//帶緩存的查詢public function cquery($sql){//緩存存放總目錄if ($this->cache_Di…

mooc課程下載_如何使用十大商學院的免費課程制作MOOC“ MBA”

mooc課程下載by Laurie Pickard通過勞里皮卡德(Laurie Pickard) 如何使用十大商學院的免費課程制作MOOC“ MBA” (How to make a MOOC “MBA” using free courses from Top 10 business schools) Back when massive open online courses (MOOCs) were new, I started a proje…

leetcode 1584. 連接所有點的最小費用(并查集)

給你一個points 數組&#xff0c;表示 2D 平面上的一些點&#xff0c;其中 points[i] [xi, yi] 。 連接點 [xi, yi] 和點 [xj, yj] 的費用為它們之間的 曼哈頓距離 &#xff1a;|xi - xj| |yi - yj| &#xff0c;其中 |val| 表示 val 的絕對值。 請你返回將所有點連接的最小…

Nagios學習實踐系列

其實上篇Nagios學習實踐系列——基本安裝篇只是安裝了Nagios基本組件&#xff0c;雖然能夠打開主頁&#xff0c;但是如果不配置相關配置文件文件&#xff0c;那么左邊菜單很多頁面都打不開&#xff0c;相當于只是一個空殼子。接下來&#xff0c;我們來學習研究一下Nagios的配置…

在Salesforce中處理Email的發送

在Salesforce中可以用自帶的 Messaging 的 sendEmail 方法去處理Email的發送 請看如下一段簡單代碼&#xff1a; public boolean TextFormat {get;set;} public string EmailTo {get;set;} public string EmailCC {get;set;} public string EmailBCC {get;set;} public string …

kvm vnc的使用,鼠標漂移等

1.宿主機的vnc&#xff08;virtual Network Computing&#xff09;配置 安裝rpm包 yum install tigervnc-server -y 為了防止干擾直接關閉防火墻和selinux /etc/init.d/iptables stop setenforce 0 配置vnc密碼和啟動vncserver服務 vncpasswd vncserver 2.客戶機的vnc 在qemu…

php深淺拷貝,JavaScript 中的深淺拷貝

工作中經常會遇到需要復制 JavaScript 數據的時候&#xff0c;遇到 bug 時實在令人頭疼&#xff1b;面試中也經常會被問到如何實現一個數據的深淺拷貝&#xff0c;但是你對其中的原理清晰嗎&#xff1f;一起來看一下吧&#xff01;一、為什么會有深淺拷貝想要更加透徹的理解為什…

使用Python進行地理編碼和反向地理編碼

Geocoding is the process of taking input text, such as an address or the name of a place, and returning a latitude/longitude location. To put it simply, Geocoding is converting physical address to latitude and longitude.地理編碼是獲取輸入文本(例如地址或地點…

java開發簡歷編寫_如何通過幾個簡單的步驟編寫出色的初級開發人員簡歷

java開發簡歷編寫So you’ve seen your dream junior developer role advertised, and are thinking about applying. It’s time to write that Resume! Nothing better than sitting down to a blank piece of paper and not knowing how to start, right?因此&#xff0c;您…

leetcode 628. 三個數的最大乘積(排序)

給定一個整型數組&#xff0c;在數組中找出由三個數組成的最大乘積&#xff0c;并輸出這個乘積。 示例 1: 輸入: [1,2,3] 輸出: 6 解題思路 最大的乘積可能有兩種情況 1.兩個最小負數和一個最大正數 2.三個最大正數 代碼 class Solution {public int maximumProduct(int[…

[Object-C語言隨筆之三] 類的創建和實例化以及函數的添加和調用!

上一小節的隨筆寫了常用的打印以及很基礎的數據類型的定義方式&#xff0c;今天就來一起學習下如何創建類與函數的一些隨筆&#xff1b; 首先類的創建&#xff1a;在Xcode下&#xff0c;菜單File&#xff0d;New File&#xff0c;然后出現選擇class模板&#xff0c;如下圖&…

2024-AI人工智能學習-安裝了pip install pydot但是還是報錯

2024-AI人工智能學習-安裝了pip install pydot但是還是報錯 出現這樣子的錯誤&#xff1a; /usr/local/bin/python3.11 /Users/wangyang/PycharmProjects/studyPython/tf_model.py 2023-12-24 22:59:02.238366: I tensorflow/core/platform/cpu_feature_guard.cc:182] This …

grafana 創建儀表盤_創建儀表盤前要問的三個問題

grafana 創建儀表盤可視化 (VISUALIZATIONS) It’s easier than ever to dive into dashboarding, but are you doing it right?深入儀表板比以往任何時候都容易&#xff0c;但是您這樣做正確嗎&#xff1f; Tableau, Power BI, and many other business intelligence tools …

qq群 voiceover_如何在iOS上使用VoiceOver為所有人構建應用程序

qq群 voiceoverby Jayven N由Jayven N 如何在iOS上使用VoiceOver為所有人構建應用程序 (How to build apps for everyone using VoiceOver on iOS) 輔助功能入門 (Getting started with accessibility) There’s always those topics that people don’t talk about enough. S…

IntelliJ IDEA代碼常用的快捷鍵(自查)

IntelliJ IDEA代碼常用的快捷鍵有&#xff1a; Alt回車 導入包&#xff0c;自動修正 CtrlN 查找類 CtrlShiftN 查找文件 CtrlAltL 格式化代碼 CtrlAltO 優化導入的類和包 AltInsert 生成代碼(如get,set方法,構造函數等) CtrlE或者AltShiftC 最近更改的代碼 CtrlR…

leetcode 1489. 找到最小生成樹里的關鍵邊和偽關鍵邊(并查集)

給你一個 n 個點的帶權無向連通圖&#xff0c;節點編號為 0 到 n-1 &#xff0c;同時還有一個數組 edges &#xff0c;其中 edges[i] [fromi, toi, weighti] 表示在 fromi 和 toi 節點之間有一條帶權無向邊。最小生成樹 (MST) 是給定圖中邊的一個子集&#xff0c;它連接了所有…

帶彩色字體的man pages(debian centos)

1234567891011121314151617181920212223242526272829303132333435363738我的博客已遷移到xdoujiang.com請去那邊和我交流簡介most is a paging program that displays,one windowful at a time,the contents of a file on a terminal. It pauses after each windowful and prin…

提取json對象中的數據,轉化為數組

var xx1 ["樂譜中的調號為&#xff08; &#xff09;調", "寫出a自然小調音階。", "以G為冠音&#xff0c;構寫增四、減五音程。", "調式分析。", "將下列樂譜移為C大調。", "正確組合以下樂譜。", "以下…

java 同步塊的鎖是什么,java – 同步塊 – 鎖定多個對象

我添加了另一個答案&#xff0c;因為我還沒有添加評論給其他人的帖子。>事實上&#xff0c;同步是用于代碼&#xff0c;而不是對象或數據。在同步塊中用作參數的對象引用表示鎖定。所以如果你有如下代碼&#xff1a;class Player {// Same instance shared for all players.…