摘要:小明是中簡單,最直接的一種用法,寫起來較麻煩,循環要執行確定的次數,通常使用循環。
let arr = [2, 4, 6, 56, 7, 88]; let obj = { name: "小明", age: 18, hobby: "run,song,game" }; let str="xiaoming"for
for是js中簡單,最直接的一種用法,寫起來較麻煩,循環要執行確定的次數,通常使用 for 循環。for類循環都可以break,return.
for (let i = 0; i < arr.length; i++) { console.log(i + ":" + arr[i]) //0:2 1:4 2:6 3:56 4:7 5:88 }while
很容易死循環
let arr=[1,0,8,7],i=0; while(ido while 很容易死循環
let arr=[1,0,8,7],i=0; do{ console.log(i+":"+arr[i]);//0:1 1:0 2:8 3:7 i++ }while(ifor in 遍歷的key,key為string類型,也會循環原型鏈中的屬性,適用于對象
for(let key in obj){ console.log(key+":"+obj[key]) //name:小明 age:18 hobby:run,song,game }for of遍歷的value
for(let value of arr){ console.log(value) //2 4 6 56 7 88 } for (let [key, value] of arr.entries()) { console.log(key+":"+value); //0:2 1:4 2:6 3:56 4:7 5:88 } for (let [key, value] of Object.entries(obj)) { console.log(key+":"+value); //name:小明 age:18 hobby:run,song,game }forEach最節省內存的一種,但是不能break,也不能用return
arr.forEach((value,key)=>{ console.log(key + ":" + value) //0:2 1:4 2:6 3:56 4:7 5:88 }) Object.keys(obj).forEach((value)=>{ console.log(value) //"name", "age", "hobby" })map同forEach寫法一樣,循環每一個的時候就相當于在內存中新建了一個數據,比較占內存,與forEach不同的是,它可以return。返回數組。
arr.map((value,index)=>{ console.log(index+":"+value) //0:2 1:4 2:6 3:56 4:7 5:88 }) Object.values(obj).map((value,key)=>{ console.log(key+":"+value) //0:小明 1:18 2:run,song,game })Object.keys()/values()console.log(Object.keys(obj)) // (3) ["name", "age", "hobby"] console.log(Object.values(obj)) // (3) ["小明", 18, "run,song,game"]Array Array.prototype.reduce()累加器
語法:arr .reduce(callback [累加器累加的值,當前元素的值,當前元素的索引(可選),]) arr.reduce((acc,value)=>acc+value) //2+4+6+56+7+88=163 arr.reduce((acc,value)=>{ return acc+value },5) //5+2+4+6+56+7+88=168,第一個為此時設置的值為index=0開始 //合并數組 [[0, 1], [2, 3], [4, 5]].reduce( ( acc, cur ) => acc.concat(cur), [] //[0, 1, 2, 3, 4, 5] ); //統計出現次數 var names = ["Alice", "Bob", "Tiff", "Bruce", "Alice"]; names.reduce(function (allNames, name) { if (name in allNames) { allNames[name]++; } else { allNames[name] = 1; } return allNames; }, {}); // { "Alice": 2, "Bob": 1, "Tiff": 1, "Bruce": 1 } //按順序運行promise function runPromiseInSequense(arr) { return arr.reduce((promiseChain, currentPromise) => { return promiseChain.then((chainedResult) => { return currentPromise(chainedResult) .then((res) => res) }) }, Promise.resolve()); } // promise function 1 function p1() { return new Promise((resolve, reject) => { resolve(5); }); } // promise function 2 function p2(a) { return new Promise((resolve, reject) => { resolve(a * 2); }); } // promise function 3 function p3(a) { return new Promise((resolve, reject) => { resolve(a * 3); }); } const promiseArr = [p1, p2, p3]; runPromiseInSequense(promiseArr) .then((res) => { console.log(res); //5+5*2+5*3= 30 });Array.prototype.every()遍歷所有元素,得到一個bool值,要所有條件都相符才會返回true
arr.every(x =>{ x >= 10}); // falseArray.prototype.some()得到一個布爾值,只要有一個符合條件就可返回true
arr.some(item=>{ return item>10 //true })Array.prototype.filter()返回一個符合條件的新數組
arr.filter(item=>{ return item>10 //(2) [56, 88] })Array.prototype.find()返回符合條件的數組的值或數組的對象,找不到返回undefined
arr.find(item=>item==2)//2Array.indexof(),findIndex()/includs()查找。返回index/-1,boolean Array.prototype.fill(填充的值,開始索引,結束索引)[1, 2, 3].fill(4, 1, 2); // [1, 4, 3]Array.sort()排序
arr.sort((a,b)=>a-b)//升序 arr.sort((a,b)=>b-a)//降序Object Object.creact(proto)proto:一個對象,作為創建新對象的原型或null
用指定的原型對象和屬性創建一個新的對象//來實現類式繼承,單繼承 fuction Shape(){ this.x=0; this.y=0; } Shape.prototype.move=function(x,y){ this.x += x; this.y += y } function Rectangle(){ Shape.call(this) } Rectangle.prototype=Object.create(Shape.prototype) var rect=new Rectangle() rect instanceof Rectangle //true rect instanceof Shape //trueObject.defineProperty(目標對象,給對象要加的屬性);返回加了屬性之后的對象 Object.getOwnPropertyNames(目標對象);返回帶有該對象屬性的數組 Object.is(value1,value2);判斷2個值是否相同,返回布爾值
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/107116.html
摘要:遍歷器對象調用方法后,拋出的異常被函數體捕獲以后,會附帶執行下一條語句。 iterator迭代器 在ES6之前遍歷數組的方法有以下四種: // 第一種 for(var i = 0; i < array.length; i++){ console.log(array[i]) } // 第二種 array.forEach(function(item,index){ cons...
在之前的文章中我們有講過樹的相關知識,例如,樹的概念、深度優先遍歷和廣度優先遍歷。這篇文章講述了一個特殊的樹——二叉樹。 什么是二叉樹 二叉樹是每個節點最多只能有兩個子節點的樹,如下圖所示: 一個二叉樹具有以下幾個特質: 要計算在每層有多少個點,可以依據公式2^(i-1)個(i是樹的第幾層); 如果這顆二叉樹的深度為k,那二叉樹最多有2^k-1個節點; 在一個非空的二叉樹中,若使...
摘要:不過讓流行起來的原因應該是是目前所有主流瀏覽器上唯一支持的腳本語言。經過測試,數字字符串布爾日期可以直接賦值,修改不會產生影響。再考慮對象類型為或者的情況。對于結果聲明其類型。判斷對象的類型是還是,結果類型更改。 轉載自我的個人博客 歡迎大家批評指正 1. 第一個頁面交互 這里最需要學習的老師的代碼中,每一部分功能都由函數控制,沒有創建一個全部變量。且最后有一個函數來控制執行代碼...
摘要:關注于運行中的內存信息的展示,用可視化的方式還原了,有助于理解內存管理。背景運行過程中的大部分數據都保存在堆中,所以性能分析另一個比較重要的方面是內存,也就是堆的分析。上周發布了工具,可以用來動態地展示的結果,分析各種函數的調用關系。 OneHeap 關注于運行中的 JavaScript 內存信息的展示,用可視化的方式還原了 HeapGraph,有助于理解 v8 內存管理。 ...
摘要:區別一是中發布的。是作為標準的一部分在中發布的,而它不是標準的一部分。這將意味著存在各種瀏覽器的兼容性問題。遍歷對象,由于沒辦法提供理想的遍歷,因而只能選擇其他方法。 區別一: for in是javascript 1.0 中發布的。 for each in是作為E4X標準的一部分在javascript 1.6中發布的,而它不是ECMAScript標準的一部分。 這將意味著存在各種瀏覽器...
閱讀 3280·2021-09-30 09:47
閱讀 2296·2021-09-10 10:51
閱讀 1897·2021-09-08 09:36
閱讀 2931·2019-08-30 12:56
閱讀 3034·2019-08-30 11:16
閱讀 2627·2019-08-29 16:40
閱讀 2999·2019-08-29 15:25
閱讀 1637·2019-08-29 11:02