延遲加載JS有哪些方式?
async defer 都可以做到延遲加載js
例如:<script defer type="text/javascript" src="script.js">
defer:等html全部解析完成谈撒,才會執(zhí)行js代碼,順次執(zhí)行js腳本
async:async是和html解析同步的(一起的)匾南,不是順次執(zhí)行js腳本(誰先加載完誰先執(zhí)行)
面試題:JS數(shù)據(jù)類型有哪些啃匿?
基本類型
string number boolean null undefined symbol bigint
引用類型
object
面試題: JS數(shù)據(jù)類型
console.log(true+1) //2
console.log('name'+true) //'nametrue'
字符串和其他類型 相加 變成鏈接類型
console.log(undefined +1) //NaN
console.log(typeof null) //object
typeof(NaN)
'number'
typeof(undefined)
'undefined'
typeof(null)
'object'
NaN 是一個(gè)數(shù)值類型,但是不是一個(gè)具體的數(shù)字蛆楞。
面試題:null和undefined的區(qū)別溯乒?
1、作者在設(shè)計(jì)js的都是先設(shè)計(jì)null(為什么設(shè)計(jì)null:最初設(shè)計(jì)js的時(shí)候借鑒了Java的語言)
2豹爹、null會被隱式轉(zhuǎn)換成0裆悄,很不容易發(fā)現(xiàn)錯(cuò)誤。
3臂聋、先有null后有undefined光稼,出來undefined是為了填補(bǔ)之前的坑。
具體區(qū)別:
javascript的最初版本是這樣區(qū)分的孩等,null是一個(gè)表示“無”的對象(空對象指針)艾君,轉(zhuǎn)為數(shù)值時(shí)為0,undefined是一個(gè)表示“無”的原始值肄方,轉(zhuǎn)為數(shù)值時(shí)為NaN.
面試題:==和===有什么不同冰垄?
>==:比較的是值。
===:除了比較值权她,還比較類型虹茶。
面試題:JS微任務(wù)和宏任務(wù)(知不知道js是怎么執(zhí)行的以及執(zhí)行順序)
1、js是單線程語言
2隅要、js代碼執(zhí)行流程:同步執(zhí)行完=>事件循環(huán)
同步的任務(wù)都執(zhí)行完了蝴罪,才會執(zhí)行事件循環(huán)的內(nèi)容
進(jìn)入事件循環(huán) :請求 、定時(shí)器拾徙、事件...
3洲炊、事件循環(huán)中包含:【微任務(wù) 、宏任務(wù)】
微任務(wù):promise.then
宏任務(wù):setTimeout
要執(zhí)行宏任務(wù)的前提是清空了所有的微任務(wù)
流程:同步=》事件循環(huán)【微任務(wù)和宏任務(wù)】=》微任務(wù)=》宏任務(wù)=》微任務(wù)....
setTimeout(function(){
console.log(1)
})
new Promise((resolve)=>{
console.log('Promise 1') //同步
resolve()
}).then(()=>{
console.log('微1')
}).then(()=>{
console.log('微2')
})
console.log(2) //同步
//結(jié)果:Promise 1,2暂衡,1询微,微2,1
面試題:JS作用域考題
1狂巢、除了函數(shù)外撑毛,js是沒有塊級作用域的。
2唧领、作用域鏈:內(nèi)部可以訪問外部的變量藻雌,但是外部不能訪問內(nèi)部的變量。
注意:如果內(nèi)部有斩个,優(yōu)先查找到內(nèi)部胯杭,如果內(nèi)部沒有就查找外部的。
3受啥、注意聲明變量是用var還是沒有寫(window.)
4做个、注意:js有變量提升的機(jī)制【變量懸掛聲明】
- 優(yōu)先級:聲明變量 > 聲明普通函數(shù) > 參數(shù) > 變量提升
面試的時(shí)候怎么看:
- 本層作用域有沒有此變量【注意變量提升】
- 注意:js除了函數(shù)外沒有塊級作用域
- 普通聲明函數(shù)是不看寫函數(shù)的時(shí)候順序
考題一:
function c(){
var b = 1;
function a(){
console.log( b ); // undefined
var b = 2;
console.log( b );//2
}
a();
console.log( b ); //1
}
c();
考題二:
var name = 'a';
(function(){ //var name ;
if( typeof name == 'undefined' ){
var name = 'b';
console.log('111'+name); //111b
}else{
console.log('222'+name);
}
})()
考題三:
function fun( a ){
var a = 10;
function a(){}
console.log( a );//100
}
fun( 100 );
function fun( a ){
var a = 10;
function a(){}
console.log( a );//10
}
fun( );
js對象考題
js對象注意點(diǎn) new創(chuàng)建新對象
- 對象是通過new操作符構(gòu)建出來的,所以對象之間不相等(除了引用外)滚局;
- 對象注意:引用類型(共同一個(gè)地址)居暖;
- 對象的key都是字符串類型;
4.對象如何找屬性|方法
查找規(guī)則:先在對象本身找==》函數(shù) (構(gòu)造函數(shù)中找)==》對象原型中找 ==》構(gòu)造函數(shù)原型中找==》對象上一層原型查找
考題一:
[1,2,3] === [1,2,3] //false
考題二:
var obj1 = {
a:'hellow'
}
var obj2 = obj1; //引用地址相同
obj2.a = 'world';
console.log(obj1); // {a:'world'}
(function(){
console.log(a); //變量提升 undefined
var a = 1;
})();
考題三:
var a = {}
var b = {
key:'a'
}
var c = {
key:'c'
}
a[b] = '123';
a[c] = '456';
console.log( a[b] ); //456
JS作用域+this指向+原型的考題
考題一:
function Foo(){
getName = function(){console.log(1)} //注意是全局的window.
return this;
}
Foo.getName = function(){console.log(2)}
Foo.prototype.getName = function(){console.log(3)}
var getName = function(){console.log(4)}
function getName(){
console.log(5)
}
Foo.getName(); //2
getName(); //4 聲明變量>聲明普通函數(shù)
//getName = function(){console.log(1)} //注意是全局的window.
Foo().getName(); //1
getName(); //1
new Foo().getName(); //3
//先在對象本身找 ===> 構(gòu)造函數(shù)中找 ===> 對象原型中找 ===> 構(gòu)造函數(shù)原型中找 ===> 對象上一層原型查找
考題二:
var o = {
a:10,
b:{
a:2,
fn:function(){
console.log( this.a ); //2
console.log( this ); //代表b對象
}
}
}
o.b.fn();
考題三:
window.name = 'ByteDance';
function A(){
this.name = 123;
}
A.prototype.getA = function(){
console.log( this );
return this.name + 1;
}
let a = new A();
let funcA = a.getA;
funcA(); // this 代表window ByteDance1
考題四:
var length = 10;
function fn(){
return this.length + 1;
}
var obj = {
length:5,
test1:function(){
return fn();
}
}
obj.test2 = fn;
console.log( obj.test1() ); //11
console.log( fn()===obj.test2() );//11,6 //false
console.log( obj.test1() == obj.test2() ); //11 6 //false
JS判斷變量是不是數(shù)組藤肢,你能寫出哪些方法太闺?
方式一:isArray
var arr = [1,2,3]
console.log(Array.isArray(arr))
方式二:instanceof [可寫 可不寫]
var arr = [1,2,3]
console.log(arr instanceof Array )
方式三:原型prototype
var arr = [1,2,3]
console.log(Object.prototype.toString.call(arr).indexOf('Array')>-1 )
方式四:isPrototypeOf()
var arr = [1,2,3]
console.log(Array.prototype.isPrototypeOf(arr))
方式四:constructor
var arr = [1,2,3]
console.log( arr.constructor.toString().indexOf('Array') > -1 )
slice是干嘛的、splice是否會改變原數(shù)組
- slice是來截取的
參數(shù)可以寫slice(3)嘁圈、slice(1,3)省骂、slice(-3)
返回的是一個(gè)新的數(shù)組- splice 功能有:插入、刪除丑孩、替換
返回:刪除的元素
該方法會改變原數(shù)組
JS數(shù)組去重
方式一:new set
var arr1 = [1,2,3,4,5,6,6,6]
function unique(arr1){
return [...new Set(arr1)]
}
console.log(unique(arr1))
方式二:indexOf
var arr1 = [1,2,3,4,5,6,6,6]
function unique(arr){
var brr = []
for(var i = 0 ; i<arr.length;i++){
if(brr.indexOf(arr[i]) == -1){
brr.push(arr[i])
}
}
return brr
}
console.log(unique(arr1))
方式三:sort
var arr1 = [1,2,3,4,5,6,6,6]
function unique(arr){
arr = arr.sort()
var brr = []
for(var i = 0 ; i<arr.length;i++){
if(arr[i] !== arr[i-1]){
brr.push(arr[i])
}
}
return brr
}
console.log(unique(arr1))
找出多維數(shù)組最大值
function fnArr(arr){
var newArr = [];
arr.forEach((item,index)=>{
newArr.push(Math.max(...item))
})
return newArr;
}
console.log(fnArr([
[4,5,1,3],
[13,27,18,26],
[32,35,37,39],
[1000,1001,857,1]
]));
面試題:給字符串新增方法實(shí)現(xiàn)功能
給字符串對象定義一個(gè)addPrefix函數(shù)冀宴,當(dāng)傳入一個(gè)字符串str時(shí),它會返回新的帶有指定前綴的字符串温学,例如:console.log( 'world'.addPrefix('hello') ) 控制臺會輸出helloworld
String.prototype.addPrefix = function(str){
return str+this
}
console.log('world'.addPrefix('hello'))
面試題:面試題:找出字符串出現(xiàn)最多次數(shù)的字符以及次數(shù)
var str = 'aaabbbbbccddddddddddx';
var obj = {};
for(var i=0;i<str.length;i++){
var char = str.charAt(i);
if( obj[char] ){
obj[char]++;
}else{
obj[char] = 1;
}
}
console.log( obj );
//統(tǒng)計(jì)出來最大值
var max = 0;
for( var key in obj ){
if( max < obj[key] ){
max = obj[key];
}
}
//拿最大值去對比
for( var key in obj ){
if( obj[key] == max ){
console.log('最多的字符是'+key);
console.log('出現(xiàn)的次數(shù)是'+max);
}
}
new操作符具體做了什么
- 創(chuàng)建了一個(gè)空的對象
- 將空對象的原型略贮,指向于構(gòu)造函數(shù)的原型
- 將空對象作為構(gòu)造函數(shù)的上下文(改變this指向)
- 對構(gòu)造函數(shù)有返回值的處理判斷
function Fun( age,name ){
this.age = age;
this.name = name;
}
function create( fn , ...args ){
//1. 創(chuàng)建了一個(gè)空的對象
var obj = {}; //var obj = Object.create({})
//2. 將空對象的原型,指向于構(gòu)造函數(shù)的原型
Object.setPrototypeOf(obj,fn.prototype);
//3. 將空對象作為構(gòu)造函數(shù)的上下文(改變this指向)
var result = fn.apply(obj,args);
//4. 對構(gòu)造函數(shù)有返回值的處理判斷
return result instanceof Object ? result : obj;
}
console.log( create(Fun,18,'張三') )
面試題:閉包
1. 閉包是什么
閉包是一個(gè)函數(shù)加上到創(chuàng)建函數(shù)的作用域的連接仗岖,閉包“關(guān)閉”了函數(shù)的自由變量逃延。
2. 閉包可以解決什么問題【閉包的優(yōu)點(diǎn)】
2.1內(nèi)部函數(shù)可以訪問到外部函數(shù)的局部變量
2.2 閉包可以解決的問題
var lis = document.getElementsByTagName('li');
for(var i=0;i<lis.length;i++){
(function(i){
lis[i].onclick = function(){
alert(i);
}
})(i)
}
3. 閉包的缺點(diǎn)
3.1 變量會駐留在內(nèi)存中,造成內(nèi)存損耗問題轧拄。
解決:把閉包的函數(shù)設(shè)置為null
3.2 內(nèi)存泄漏【ie】 ==> 可說可不說揽祥,如果說一定要提到ie
面試題:原型鏈
1、原型可以解決什么問題檩电?
對象共享屬性和共享方法
2拄丰、誰有原型
函數(shù)擁有 prototype
對象擁有 proto
3府树、對象查找屬性或者方法的順序
先在對象本身查找==》構(gòu)造函數(shù)中查找==》對象原型中找==》構(gòu)造函數(shù)中的原型中找==》當(dāng)前的原型的原型中找
4、原型鏈
4.1是什么料按?就是把原型串聯(lián)起來
4.2 原型鏈的最頂端是null
面試題: JS繼承有哪些方式
方式一:ES6
class Parent{
constructor(){
this.age = 18;
}
}
class Child extends Parent{
constructor(){
super();
this.name = '張三';
}
}
let o1 = new Child();
console.log( o1,o1.name,o1.age );
方式二:原型鏈繼承
function Parent(){
this.age = 20;
}
function Child(){
this.name = '張三'
}
Child.prototype = new Parent();
let o2 = new Child();
console.log( o2,o2.name,o2.age );
方式三:借用構(gòu)造函數(shù)繼承
function Parent(){
this.age = 22;
}
function Child(){
this.name = '張三'
Parent.call(this);
}
let o3 = new Child();
console.log( o3,o3.name,o3.age );
方式四:組合式繼承
function Parent(){
this.age = 100;
}
function Child(){
Parent.call(this);
this.name = '張三'
}
Child.prototype = new Parent();
let o4 = new Child();
console.log( o4,o4.name,o4.age );
面試題:說一下call奄侠、apply、bind區(qū)別
共同點(diǎn):功能一致
可以改變this指向
語法:函數(shù).call() 载矿、函數(shù).apply()垄潮、函數(shù).bind()
var str = '你好'
var obj = { str :'stsaa'}
function fun(){
console.log(this,this.str)
}
fun.call(obj) //call立即執(zhí)行
fun.apply(obj) //apply立即執(zhí)行
fun.bind(obj)() //bind不會立即執(zhí)行 因?yàn)閎ind返回的是函數(shù)
fun()
var str = '你好'
var obj = { str :'stsaa'}
function fun(name,age){
this.name = name
this.age = age
console.log(this,this.str)
}
// fun.call(obj) //call立即執(zhí)行
// fun.apply(obj) //apply立即執(zhí)行
// fun.bind(obj)() //bind不會立即執(zhí)行 因?yàn)閎ind返回的是函數(shù)
// fun()
fun.call(obj,'張三',88) //參數(shù)需要挨個(gè)寫
fun.apply(obj,['張三',88]) //參數(shù)是數(shù)組
fun.bind(obj,'張三',88)() //參數(shù)需要挨個(gè)寫
// fun()
區(qū)別:
1、call闷盔、apply可以立即執(zhí)行弯洗。bind不會立即執(zhí)行,因?yàn)榉祷氐氖且粋€(gè)函數(shù)需要加入()執(zhí)行逢勾。
2牡整、參數(shù)不同:apply第二個(gè)參數(shù)是數(shù)組。call和bind有多個(gè)參數(shù)挨個(gè)寫溺拱。
場景:
1果正、call、apply可以立即執(zhí)行盟迟。bind不會立即執(zhí)行,因?yàn)榉祷氐氖且粋€(gè)函數(shù)需要加入()執(zhí)行潦闲。
2攒菠、參數(shù)不同:apply第二個(gè)參數(shù)是數(shù)組。call和bind有多個(gè)參數(shù)挨個(gè)寫歉闰。
場景:
1. 用apply的情況
var arr1 = [1,2,4,5,7,3,321];
console.log( Math.max.apply(null,arr1) )
2. 用bind的情況
var btn = document.getElementById('btn');
var h1s = document.getElementById('h1s');
btn.onclick = function(){
console.log( this.id );
}.bind(h1s)
面試題:深拷貝和淺拷貝
共同點(diǎn):復(fù)制
1辖众、淺拷貝:只復(fù)制引用,而未復(fù)制真正的值和敬。//相互受影響
var arr1 = ['a','b','c','d']
var arr2 = arr1;
arr1[0] = '你好嗎'
arr2[1] = '還行'
console.log(arr1,arr2)
var obj1 = {a:1,b:2}
var obj2 = Object.assign(obj1);
2. 深拷貝:是復(fù)制真正的值 (不同引用)
var obj3 = {
a:1,
b:2
}
var obj4 = JSON.parse(JSON.stringify( obj3 ));
//遞歸的形式
function copyObj( obj ){
if( Array.isArray(obj) ){
var newObj = [];
}else{
var newObj = {};
}
for( var key in obj ){
if( typeof obj[key] == 'object' ){
newObj[key] = copyObj(obj[key]);
}else{
newObj[key] = obj[key];
}
}
return newObj;
}
console.log( copyObj(obj5) );
面試題:localStorage凹炸、sessionStorage、cookie的區(qū)別
共同點(diǎn):在客戶端存放數(shù)據(jù)
區(qū)別:
1昼弟、數(shù)據(jù)存放有效期
sessionStorage : 僅在當(dāng)前瀏覽器窗口關(guān)閉之前有效啤它。【關(guān)閉瀏覽器就沒有了】
localStorage : 始終有效舱痘,窗口或者瀏覽器關(guān)閉也一直保存变骡,所以叫持久化存儲。
cookie:只在設(shè)置的cookie過期時(shí)間之前有效芭逝,即使窗口或者瀏覽器關(guān)閉也有效塌碌。
2、localStorage旬盯、sessionStorage不可以設(shè)置過期時(shí)間
cookie 有國企時(shí)間台妆、可以設(shè)置過期(把時(shí)間調(diào)整到之前的時(shí)間翎猛,就過期了)
3、存儲大小的限制
cookie 存儲量不能超過4k
localStorage 接剩、sessionStorage 不能超過5M
****根據(jù)不同的瀏覽器存儲的大小不同的***
面試題:什么是語義化標(biāo)簽
- 易讀性和維護(hù)性更好切厘。
- seo成分會更好,蜘蛛抓取更好搂漠。
- IE8不兼容HTML5標(biāo)簽的迂卢。解決:可以通過html5shiv.js去處理。
面試題:::before 和 :after中雙冒號和單冒號 有什么區(qū)別桐汤?解釋一下這2個(gè)偽元素的作用
- 區(qū)別
:是偽類而克、::偽元素 ===》是為了做區(qū)分
2.是什么?作用
元素before之前 怔毛、 元素after之后
作用:清除浮動(dòng)员萍、樣式布局上也有作用
面試題:如何關(guān)閉IOS鍵盤首字母自動(dòng)大寫
<input type="text" autocapitalize='off'>
面試題:怎么讓Chrome支持小于12px 的文字?
Chrome默認(rèn)字體大小是:16px
**每個(gè)瀏覽器默認(rèn)字體大小可能都不一樣
<style type="text/css">
div{
font-size:10px;
}
div span{
display: inline-block;
-webkit-transform:scale(1.6);
}
</style>
面試題:rem和em區(qū)別
相對于font-size
em針對于父元素的font-size
rem針對于根(html)元素的font-size
面試題:ios系統(tǒng)中元素被觸摸時(shí)產(chǎn)生的半透明灰色遮罩怎么去掉
<style>
a,button,input,textarea{
-webkit-tap-highlight-color: rgba(0,0,0,0);
}
</style>
面試題:webkit表單輸入框placeholder的顏色值能改變嗎拣度?
<style type="text/css">
input::-webkit-input-placeholder{
color:red;
}
</style>
面試題:禁止ios長按時(shí)觸發(fā)系統(tǒng)的菜單碎绎,禁止ios&android長按時(shí)下載圖片
禁止ios 長按時(shí)觸發(fā)系統(tǒng)的菜單,禁止ios&android長按時(shí)下載圖片
html,body{
touch-callout: none;
-webkit-touch-callout: none;
user-select:none;
-webkit-user-select:none;
}
面試題:禁止ios和android用戶選中文字
html,body{
user-select:none;
-webkit-user-select:none;
}
面試題:自適應(yīng)
淘寶無限適配【移動(dòng)端】:淘寶無限適配 + 布局單位使用rem
響應(yīng)式
1. 是什么抗果?
一個(gè)URL可以響應(yīng)多端
2. 語法結(jié)構(gòu)
@media only screen and (max-width: 1000px){
ul li:last-child{
display: none;
}
}
only : 可以排除不支持媒體查詢的瀏覽器
screen : 設(shè)備類型
max-width | max-height
min-width | min-height
3. 響應(yīng)式圖片【性能優(yōu)化】
<picture>
<source srcset="1.jpg" media='(min-width:1000px)'>
<source srcset="2.jpg" media='(min-width:700px)'>
<img srcset="3.jpg">
</picture>
面試題:響應(yīng)式
1. 是什么筋帖?
一個(gè)URL可以響應(yīng)多端
2. 語法結(jié)構(gòu)
@media only screen and (max-width: 1000px){
ul li:last-child{
display: none;
}
}
only : 可以排除不支持媒體查詢的瀏覽器
screen : 設(shè)備類型
max-width | max-height
min-width | min-height
3. 響應(yīng)式圖片【性能優(yōu)化】
<picture>
<source srcset="1.jpg" media='(min-width:1000px)'>
<source srcset="2.jpg" media='(min-width:700px)'>
<img srcset="3.jpg">
</picture>
布局方案
一、什么情況下采用響應(yīng)式布局
數(shù)據(jù)不是特別多冤馏,用戶量不是特別大日麸,純展示類的項(xiàng)目適合響應(yīng)式布局
例如:公司的官網(wǎng)、專題頁面
特別追求性能的項(xiàng)目逮光,不太適合響應(yīng)式代箭,因?yàn)槿绻砑恿撕芏嗟捻憫?yīng)式就會造成加載速度變慢。
二涕刚、pc + 移動(dòng)端應(yīng)該做什么樣的布局方案
注意:訪問量還可以或者比較大嗡综,類似于淘寶網(wǎng)。
pc是一套杜漠,會加入一點(diǎn)點(diǎn)響應(yīng)式极景。
移動(dòng)端是一套,會使用自適應(yīng)的布局方式碑幅。
三戴陡、pc的設(shè)計(jì)圖
ui:1980
筆記本電腦:1280
ui圖的寬度和電腦的寬度不對應(yīng)該怎么辦?
1. 把ui圖進(jìn)行等比縮放沟涨,縮放成和電腦一樣的尺寸
2. 換1980的電腦
四恤批、移動(dòng)端的設(shè)計(jì)圖
寬度:750
因?yàn)?50設(shè)計(jì)圖/2就是375,正好是iphone6的尺寸裹赴,我們要把iphone6的尺寸做為基準(zhǔn)點(diǎn)喜庞。
面試題:var诀浪、let、const區(qū)別
var延都、let雷猪、const 共同點(diǎn)都是可以聲明變量的
區(qū)別一:
var 具有變量提升的機(jī)制
let和const沒有變量提升的機(jī)制
區(qū)別二:
var 可以多次聲明同一個(gè)變量
let和const不可以多次聲明同一個(gè)變量
區(qū)別三:
var、let聲明變量的
const聲明常量
var和let聲明的變量可以再次賦值晰房,但是const不可以再次賦值了求摇。
區(qū)別四:
var聲明的變量沒有自身作用域
let和const聲明的變量有自身的作用域
面試題:作用域考題
考題一:let和const沒有變量提升性
console.log( str );//undefined
var str = '你好';
console.log( num );//報(bào)錯(cuò)
let num = 10;
var n = 2;
if( true ){
var n = 1;
}
console.log( n );//1
}
demo();
function demo(){
let n = 2;
if( true ){
let n = 1;
}
console.log( n );//2
}
demo();
考題三:可以修改
const obj = {
a:1
}
obj.a = 11111;
console.log( obj ) //{a:11111}
const arr = ['a','b','c'];
arr[0]= 'aaaaa';
console.log( arr ); //['aaaaa','b','c']
面試題:將下列對象進(jìn)行合并
方式一:Object.assign
const a = {a:1,b:4};
const b = {b:2,c:3};
let obj1 = Object.assign(a,b);
console.log( obj1 );
方式二:...
let obj2 = {...a,...b};
console.log( obj2 );
方式三:自己封裝方法
function extend( target, source ){
for(var key in source){
target[key] = source[key];
}
return target;
}
console.log( extend(a,b) );
面試題:箭頭函數(shù)和普通函數(shù)有什么區(qū)別?
- this指向的問題
箭頭函數(shù)中的this只在箭頭函數(shù)定義時(shí)就決定的殊者,而且不可修改的(call与境、apply、bind)
****箭頭函數(shù)的this指向定義時(shí)候猖吴、外層第一個(gè)普通函數(shù)的this- 箭頭函數(shù)不能new(不能當(dāng)作構(gòu)造函數(shù))
- 箭頭函數(shù)prototype
- 箭頭函數(shù)arguments
面試題:Promise有幾種狀態(tài)
有三種狀態(tài):
pending(進(jìn)行中)
fulfilled(已成功)
rejected(已失斔さ蟆)
面試題:find和filter的區(qū)別
區(qū)別一:返回的內(nèi)容不同
filter 返回是新數(shù)組
find 返回具體的內(nèi)容
區(qū)別二:
find :匹配到第一個(gè)即返回
filter : 返回整體(沒一個(gè)匹配到的都返回)
面試題:some和every的區(qū)別
some ==》 如果有一項(xiàng)匹配則返回true
every ==》 全部匹配才會返回true