邦道科技面試
如何進行數組循環的
第一種方法就是for()循環
es5新增加的迭代方法(every,filter,forEach,map,some)
這些方法都接收兩個參數,1)在每一項上可運行的函數(傳入的函數接受三個參數:a. 數組項的值;b. 該項在數組中的位置; c. 數組本身);2)(可選)運行該函數的作用域——影響this的值。
Map和foreach函數有啥區別
原理:
- 高級瀏覽器支持forEach方法
- 語法:forEach和map都支持2個參數:一個是回調函數(item,index,list)和上下文;
- forEach:用來遍歷數組中的每一項;這個方法執行是沒有返回值的,對原來數組也沒有影響;
- 數組中有幾項,那么傳遞進去的匿名回調函數就需要執行幾次;
- 每一次執行匿名函數的時候,還給其傳遞了三個參數值:數組中的當前項item,當前項的索引index,原始數組input;
- 理論上這個方法是沒有返回值的,僅僅是遍歷數組中的每一項,不對原來數組進行修改;但是我們可以自己通過數組的索引來修改原來的數組;
- forEach方法中的this是ary,匿名回調函數中的this默認是window;
- map:和forEach非常相似,都是用來遍歷數組中的每一項值的,用來遍歷數組中的每一項;
區別:map的回調函數中支持return返回值;return的是啥,相當於把數組中的這一項變為啥(並不影響原來的數組,只是相當於把原數組克隆一份,把克隆的這一份的數組中的對應項改變了);
- 不管是forEach還是map 都支持第二個參數值,第二個參數的意思是把匿名回調函數中的this進行修改。
數組的方法
join()
oin(separator): 將數組的元素組起一個字符串,以separator為分隔符,省略的話則用默認用逗號為分隔符,該方法只接收一個參數:即分隔符。
push()和pop()
push(): 可以接收任意數量的參數,把它們逐個添加到數組末尾,並返回修改后數組的長度。
pop():數組末尾移除最后一項,減少數組的 length 值,然后返回移除的項。
shift() 和 unshift()
shift():刪除原數組第一項,並返回刪除元素的值;如果數組為空則返回undefined 。
unshift:將參數添加到原數組開頭,並返回數組的長度
sort()
sort():按升序排列數組項——即最小的值位於最前面,最大的值排在最后面。
reverse()
reverse():反轉數組項的順序。
concat()
concat() :將參數添加到原數組中。這個方法會先創建當前數組一個副本,然后將接收到的參數添加到這個副本的末尾,最后返回新構建的數組。在沒有給 concat()方法傳遞參數的情況下,它只是復制當前數組並返回副本。
slice()
slice():返回從原數組中指定開始下標到結束下標之間的項組成的新數組。slice()方法可以接受一或兩個參數,即要返回項的起始和結束位置。在只有一個參數的情況下, slice()方法返回從該參數指定位置開始到當前數組末尾的所有項。如果有兩個參數,該方法返回起始和結束位置之間的項——但不包括結束位置的項。
splice()
splice():很強大的數組方法,它有很多種用法,可以實現刪除、插入和替換。
刪除:可以刪除任意數量的項,只需指定 2 個參數:要刪除的第一項的位置和要刪除的項數。例如, splice(0,2)會刪除數組中的前兩項。
插入:可以向指定位置插入任意數量的項,只需提供 3 個參數:起始位置、 0(要刪除的項數)和要插入的項。例如,splice(2,0,4,6)會從當前數組的位置 2 開始插入4和6。
替換:可以向指定位置插入任意數量的項,且同時刪除任意數量的項,只需指定 3 個參數:起始位置、要刪除的項數和要插入的任意數量的項。插入的項數不必與刪除的項數相等。例如,splice (2,1,4,6)會刪除當前數組位置 2 的項,然后再從位置 2 開始插入4和6。
splice()方法始終都會返回一個數組,該數組中包含從原始數組中刪除的項,如果沒有刪除任何項,則返回一個空數組。
indexOf()和 lastIndexOf() (ES5新增)
indexOf():接收兩個參數:要查找的項和(可選的)表示查找起點位置的索引。其中, 從數組的開頭(位置 0)開始向后查找。
lastIndexOf:接收兩個參數:要查找的項和(可選的)表示查找起點位置的索引。其中, 從數組的末尾開始向前查找。
forEach() (ES5新增)
forEach():對數組進行遍歷循環,對數組中的每一項運行給定函數。這個方法沒有返回值。參數都是function類型,默認有傳參,參數分別為:遍歷的數組內容;第對應的數組索引,數組本身。
map() (ES5新增)
map():指“映射”,對數組中的每一項運行給定函數,返回每次函數調用的結果組成的數組。
filter() (ES5新增)
filter():“過濾”功能,數組中的每一項運行給定函數,返回滿足過濾條件組成的數組。
every() (ES5新增)
every():判斷數組中每一項都是否滿足條件,只有所有項都滿足條件,才會返回true。
some() (ES5新增)
some():判斷數組中是否存在滿足條件的項,只要有一項滿足條件,就會返回true。
reduce()和 reduceRight() (ES5新增)
這兩個方法都會實現迭代數組的所有項,然后構建一個最終返回的值。reduce()方法從數組的第一項開始,逐個遍歷到最后。而 reduceRight()則從數組的最后一項開始,向前遍歷到第一項。
這兩個方法都接收兩個參數:一個在每一項上調用的函數和(可選的)作為歸並基礎的初始值。
傳給 reduce()和 reduceRight()的函數接收 4 個參數:前一個值、當前值、項的索引和數組對象。這個函數返回的任何值都會作為第一個參數自動傳給下一項。第一次迭代發生在數組的第二項上,因此第一個參數是數組的第一項,第二個參數就是數組的第二項。
Call和apply的區別
它們各自的定義:
apply:調用一個對象的一個方法,用另一個對象替換當前對象。例如:B.apply(A, arguments);即A對象應用B對象的方法。
call:調用一個對象的一個方法,用另一個對象替換當前對象。例如:B.call(A, args1,args2);即A對象調用B對象的方法。
它們的共同之處:
都“可以用來代替另一個對象調用一個方法,將一個函數的對象上下文從初始的上下文改變為由thisObj指定的新對象”。
它們的不同之處:
apply:最多只能有兩個參數——新this對象和一個數組argArray。如果給該方法傳遞多個參數,則把參數都寫進這個數組里面,當然,即使只有一個參數,也要寫進數組里。如果argArray不是一個有效的數組或arguments對象,那么將導致一個TypeError。如果沒有提供argArray和thisObj任何一個參數,那么Global對象將被用作thisObj,並且無法被傳遞任何參數。
call:它可以接受多個參數,第一個參數與apply一樣,后面則是一串參數列表。這個方法主要用在js對象各方法相互調用的時候,使當前this實例指針保持一致,或者在特殊情況下需要改變this指針。如果沒有提供thisObj參數,那么 Global 對象被用作thisObj。
實際上,apply和call的功能是一樣的,只是傳入的參數列表形式不同。
原型和原型鏈
查看:https://blog.csdn.net/yucihent/article/details/79424506
作用域和作用域鏈
查看:https://www.cnblogs.com/aaron-qk/p/5999562.html
Es6使用過哪些新特性
let
const
箭頭函數
import export 模塊化
解構賦值
Promise對象(同步異步事件處理)
查看:https://www.cnblogs.com/whybxy/p/7645578.html
Js底層如何運行的
數組去重
查看:https://www.cnblogs.com/baiyangyuanzi/p/6726258.html