68-解構賦值,迭代器,生成器函數

1.解構賦值(針對數組array,字符串String及對象object以)

結構賦值是一種特殊的語法,通過將各種結構中的元素復制到變量中達到"解構"的目的,但是數組本身沒有改變

1.1解構單層數組

    <script>let arr = [1,2,3,4,5];//獲取數組中的第一個元素let ha = arr[0];//獲取數組中的每一個元素//將數組arr中的元素一次賦值給變量a,b,c,d,elet [a,b,c,d,e] = arr;console.log(a,b,c,d,e);//輸出1 2 3 4 5//取第3個值,數組中不想要的元素可以添加逗號把它丟棄let [a1,,c1] = arr;//等于let [,,c1] = arr;console.log(c1);//輸出3</script>

1.2解構多層次的數組

    <script>let array = [[1,2,3],[4,5,6],[7,8,9]];//解構獲取數組第3個元素的第2個元素let [,,[,b]] = array;console.log(b);//輸出8</script>

1.3解構字符串類型String同上

    <script>let string = 'xyz';let [a,b,c] = string;console.log(a,b,c);//輸出x y z[,,c] = string;console.log(c);//輸出z</script>

1.4解構賦值對象Object

按對象中的屬性名進行解構賦值,修改變量名

    <script>let obj = {name:'張三',age:18,};//按屬性名進行解構let {name,age} = obj;console.log(name);//輸出張三//修改變量名let {name:aaa,age:bbb} = obj;console.log(bbb);//輸出18//aaa,bbb是重新聲明的變量名稱</script>

對已經存在的變量進行解構賦值

    <script>let obj = {name:'張三',age:18,};let name,age;//{name,age} = obj;//報錯,語句被解析為對代碼塊進行賦值,代碼塊不允許被賦值({name,age} = obj);//解決辦法加一個()console.log(name,age);//輸出 張三 18</script>

默認值屬性值為undefined時默認值生效

    <script>let obj = {name:'張三',age:18,};let {name,age,_sex:sex='男'} = obj;console.log(name,age,sex);//輸出 張三 18 男let abc = {name1:'李四',age1:'19',_sex1:'女',}let {name1,age1,_sex1:sex2='男'} = abcconsole.log(name1,age1,sex2);//輸出 李四 19 女//默認值被覆蓋</script>

嵌套解構賦值

    <script>let obj = {name:'張三',age:18,hobby:['足球'],//hobby是數組用[],作用是定位};let {name,hobby:[a]} = obj;console.log(name,a);//輸出張三 足球</script>

2.迭代器

迭代器對象是由 可迭代協議([Symbol.iterator]方法)?和 迭代器協議(next方法)?構成

迭代器是一個對象,定義一個序列,并在終止時可能附帶一個返回值;

2.1枚舉for-in,會無序遍歷對象里面的屬性(沒有辦法自定義循環過程)

  <body><script>let obj = {name:'zhangsan',age:19,};for(let index in obj){//index代表索引和屬性console.log(index,obj[index]);//index代表所有屬性名,obj[index]代表所有屬性值}</script>

2.2可迭代協議

有一個[Symbol.iterator]方法,需要返回一個迭代器對象,具有唯一性

2.3迭代器協議

迭代器通過使用 next() 方法實現了迭代器協議的任何一個對象,該方法返回具有兩個屬性對象

value:迭代的值;

done:是否迭代完完成;(ture迭代完成)(false迭代完成)

2.4迭代for-of,自定義遍歷過程?

    <script>let obj = {//obj是一個迭代器對象,因為里面擁有一個next方法并且返回了一個值name: "zhangsan",age: 19,count: 5,//可迭代協議 條件1[Symbol.iterator]: function () {  return this;//返回迭代器對象 條件2},//迭代器協議 條件1next() {if (this.count > 0) {return { value: this.count--, done: false };//迭代器協議 條件2}else{return{value:0,done:true};}},};//迭代for (let item of obj) {console.log(item);//輸出5 4 3 2 1//item拿到的是if里面value的值}</script>

3.生成器函數

生成器對象(generator)是由一個generator function返回的,它同時符合可迭代協議和迭代器協議

?生成器函數是一種特殊類型的函數,它返回一個生成器對象,這個對象可以用來實現可迭代對象。它可以使用特殊的語法來控制生成器對象的輸出,實現按需生成值序列,避免一次性生成大量的值,減少了內存的使用(都是為了構建可迭代對象,自定義迭代過程)

3.1生成器函數定義使用function*關鍵字,語法如下:

function* generator() {// 函數體
}
    <script>function*  generator(){console.log('run1');//return默認返回undefined}//調用生成器函數,返回生成器對象,--此時生成器函數的代碼塊并不執行let g = generator();//g是一個生成器對象console.log(g);g.next();//調用生成器函數當中的next()方法//此時生成器函數當中的代碼塊開始執行let r = g.next();console.log(r);//輸出結果如下</script>

?3.2yield關鍵字,暫停代碼執行,并將后面的值返回

function* generateSequence() {yield 1;yield 2;yield 3;
}const generator = generateSequence();console.log(generator.next().value); // 1
console.log(generator.next().value); // 2
console.log(generator.next().value); // 3

3.3結束迭代.return()

    <script>function*  generator(){yield 1;yield 2;yield 3;}let g = generator();let r1 = g.next();g.return();let r2 = g.next();let r3 = g.next();console.log(r1,r2,r3);//{value: 1, done: false}//{value: undefined, done: true}//{value: undefined, done: true}</script>

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

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

相關文章

c++ primer學習筆記(一)

目錄 第一章、c快速入門 重點&#xff1a;類的簡介 第二章 1、基本內置類型 2、字面值常量 1、整型字面值規則 2、浮點字面值規則 3、布爾字面值 4、字符字面值 5、非打印字符的轉義序列 ?編輯 6、字符串字面值 3、變量 1、變量標識符 2、定義和初始化對象 3、…

leetcode 1328.破壞回文串

題目鏈接LeetCode1328 1.題目 給你一個由小寫英文字母組成的回文字符串 palindrome &#xff0c;請你將其中 一個 字符用任意小寫英文字母替換&#xff0c;使得結果字符串的 字典序最小 &#xff0c;且 不是 回文串。 請你返回結果字符串。如果無法做到&#xff0c;則返回一個…

java: 無法訪問org.springframework.web.bind.annotation.RequestMapping......類文件具有錯誤的版本 61.0, 應為 52.0

文章目錄 一、報錯問題二、問題背景三、原因分析四、解決方案 一、報錯問題 java: 無法訪問org.springframework.web.bind.annotation.RequestMapping 錯誤的類文件: /D:/SoftwareInstall/Maven/repository/org/springframework/spring-web/6.0.9/spring-web-6.0.9.jar!/org/s…

latex報錯Repeated entry解決辦法

報錯原因——重復了兩個參考文獻&#xff0c;刪掉一個即可 總結 "Repeated entry"這個錯誤通常出現在你嘗試在LaTeX中多次使用同一個標簽&#xff08;label&#xff09;或者多次插入相同的圖像/表格等時。例如&#xff0c;在LaTeX中&#xff0c;我們可能會為每一個章…

Modern C++ std::any為何要求Tp可拷貝構造?

小問題也會影響設計的思路&#xff0c;某個問題或某種case的探討有助于理解設計的初衷。 聲明&#xff1a;以下_Tp/Tp都是指要放入std::any的對象的類型。 它要求_Tp is_copy_constructible, 僅僅是因為有很多函數的實現調用了Tp的拷貝構造函數嗎&#xff1f;比如說上節提到的初…

動態SQL的處理

學習視頻&#xff1a;3001 動態SQL中的元素_嗶哩嗶哩_bilibili 目錄 1.1為什么學 1.2動態SQL中的元素 條件查詢操作 if 元素 choose、when、otherwise元素 where、trim元素 更新操作 set元素使用場景 復雜查詢操作 foreach 元素中的屬性 ?編輯 迭代數組 迭代List 迭代Map 1…

代碼隨想錄算法訓練營第二十七天|LeetCode93 復原IP地址、LeetCode78 子集、LeetCode90 子集II

93.復原IP地址 思路&#xff1a;要建立一個判斷子字符串是否合法的函數&#xff0c;判斷多種不合法的情況。在回溯函數中&#xff0c;參數除了s,和startindex還需要一個pointNum來記錄句點的數量&#xff0c;當句點的數量等于3時&#xff0c;判斷最后一個子串是否合法&#xf…

第3部分 原理篇2去中心化數字身份標識符(DID)(4)

3.2.3. DID解析 3.2.3.1. DID解析參與方 圖3-5 DID 解析過程 本聰老師&#xff1a;我們之前提到過&#xff0c;DID 解析過程是將 DID 轉換為對應的 DID 文檔。這樣做的目的是驗證 DID 所代表的主體的身份。那么解析過程會涉及哪些概念呢&#xff1f;我們看圖3-&#xff0c;DI…

端智能:面向手機計算環境的端云協同AI技術創新

近年來&#xff0c;隨著移動端設備軟硬件能力的進步&#xff0c;移動端的算力有了很大提升&#xff0c;同時面向移動端的機器學習框架和模型輕量化技術越來越成熟&#xff0c;端上的AI能力逐漸進入大眾視野&#xff0c;端智能在電商領域也開始逐步走向規模化應用。通過持續探索…

leetcode日記(35)跳躍游戲Ⅱ

想了一個晚上&#xff0c;第一個思路是用動態規劃&#xff0c;記錄走到每一個節點需要跳動的最小步數&#xff0c;大致方法是每走到一個節點就遍歷一下前面的全部節點&#xff0c;看看哪個節點可以一部跳到該節點&#xff0c;然后從中選取跳躍步數最小的節點&#xff0c;最后輸…

完美解決多個Echarts圖表自適應窗口、父容器寬高,并進行性能優化

場景 很多時候我們會在繪制echarts圖表時&#xff0c;使用以下方法監聽瀏覽器尺寸變化&#xff0c;讓圖表resize()完成自適應 window.addEventListener(resize, ()>{wordCloudChart.resize() })然后&#xff0c;這種自適應真的足夠周全嘛&#xff1f;有些時候&#xff0c;…

多元正態分布(Multivariate Normal Distribution)

多元正態分布&#xff08;Multivariate Normal Distribution&#xff09;&#xff0c;也稱為多變量高斯分布&#xff0c;是單變量正態分布&#xff08;高斯分布&#xff09;在多維空間中的推廣。它是描述位于多維空間中的隨機向量的分布情況的一種概率分布。多元正態分布在統計…

基于springboot+vue的城鎮保障性住房管理系統(前后端分離)

博主主頁&#xff1a;貓頭鷹源碼 博主簡介&#xff1a;Java領域優質創作者、CSDN博客專家、阿里云專家博主、公司架構師、全網粉絲5萬、專注Java技術領域和畢業設計項目實戰&#xff0c;歡迎高校老師\講師\同行交流合作 ?主要內容&#xff1a;畢業設計(Javaweb項目|小程序|Pyt…

練習 3 Web [ACTF2020 新生賽]Upload

[ACTF2020 新生賽]Upload1 中間有上傳文件的地方&#xff0c;試一下一句話木馬 txt 不讓傳txt 另存為tlyjpg&#xff0c;木馬文件上傳成功 給出了存放目錄&#xff1a; Upload Success! Look here~ ./uplo4d/06a9d80f64fded1e542a95e6d530c70a.jpg 下一步嘗試改木馬文件后綴…

云片 3.1(日常實習)面經

1、什么時候開始學習的前端 2、平常通過哪些方式學習 3、遇到bug怎么解決的 4、元素水平居中 5、display有哪些屬性 6、align-items除了center還有哪些屬性 7、display:none和visibility:hidden區別 8、常用的計量單位有哪些 9、rem和em是相對什么的 10、vw和vh有了解…

從頭構建gpt2 基于Transformer

從頭構建gpt2 基于Transformer VX關注{曉理紫|小李子}&#xff0c;獲取技術推送信息&#xff0c;如感興趣&#xff0c;請轉發給有需要的同學&#xff0c;謝謝支持&#xff01;&#xff01; 如果你感覺對你有所幫助&#xff0c;請關注我。 源碼獲取 VX關注曉理紫并回復“chatgpt…

CSS 自測題

盒模型的寬度計算 默認為標準盒模型 box-sizing:content-box; offsetWidth (內容寬度內邊距 邊框)&#xff0c;無外邊距 答案 122px通過 box-sizing: border-box; 可切換為 IE盒模型 offsetWidth width 即 100px margin 縱向重疊 相鄰元素的 margin-top 和 margin-bottom 會發…

leetcode-簡單

448. 找到所有數組中消失的數字 硬解 時間O(n)&#xff0c;空間O(n) class Solution { public:vector<int> findDisappearedNumbers(vector<int>& nums) {vector<int> result;vector<int> tem(nums.size()1, 0);for(int i: nums){tem[i] 1;}for…

Benchmark學習筆記

小記一篇Benchmark的學習筆記 1.什么是benchmark 在維基百科中&#xff0c;是這樣子講的 “As computer architecture advanced, it became more difficult to compare the performance of various computer systems simply by looking at their specifications.Therefore, te…

python標識符、變量和常量

一、保留字與標識符 1.1保留字 保留字是指python中被賦予特定意義的單詞&#xff0c;在開發程序時&#xff0c;不可以把這些保留字作為變量、函數、類、模塊和其它對象的名稱來使用。 比如&#xff1a;and、as、def、if、import、class、finally、with等 查詢這些關鍵字的方…