邦道科技面試題


邦道科技面試

如何進行數組循環的

第一種方法就是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

Vue和angular的雙向綁定有啥區別

Flex布局


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM