1.箭頭函數(shù)有哪些特性
1、箭頭函數(shù)是匿名函數(shù),不綁定自己的this,arguments,super,new.target
2、箭頭函數(shù)會捕獲其所在上下文的this值,作為自己的this值,在使用call/apply綁定時,相當(dāng)于只是傳入了參數(shù),對this沒有影響
3、箭頭函數(shù)不綁定arguments,取而代之用rest參數(shù)…解決
4、箭頭函數(shù)當(dāng)方法使用的時候,沒有定義this綁定
5、箭頭函數(shù)不能作為構(gòu)造函數(shù),和 new 一起用就會拋出錯誤
6、箭頭函數(shù)沒有原型屬性
7、不能簡單返回對象字面量
2.實現(xiàn)數(shù)組過濾重復(fù)
Let s = [...new Set(arr)]
3.使用json方式實現(xiàn)深拷貝
let arr2 = JSON.parse(JSON.stringify(arr1));
4.ES6模板字符串有哪些好處
a. 在ES5拼接的時候,如果結(jié)構(gòu)需要換行,必須使用轉(zhuǎn)義符;在ES6中,使用模板字符串,直接使用html結(jié)構(gòu)即可
b. 在ES5中,單引號和雙引號必須注意嵌套問題,在ES6中,就不需要考慮;
c. 模板字符串中,可以寫js語句
d. 方便簡潔,不容易出錯;
5.關(guān)于對象擴展的屬性簡寫和屬性名表達(dá)方式寫法,請各舉一個例子
屬性的簡寫:必須屬性名和變量名相同
屬性表達(dá)式:[]里面可以是變量,字符串,數(shù)字,表達(dá)式
注意:如果對象的屬性是數(shù)字,不可以使用點進(jìn)行訪問
屬性名簡寫:
var title = 'offc';
var size = 10;
var obj = {
title,
size,
};
屬性名表達(dá)式:
var title = 'offc';
obj[title] = '簡書';
6.手寫promise
var p = new Promise((resolve,reject)={
if(1){
resolve(‘成功’)
}
else{
reject(‘失敗’);
}
})
p.then((res)=>{}).catch((err)=>{})
7.用class定義一個類
class Aniaml{
static Type = ‘動物’
constructor(newName){
this.name = newName
}
eat(){conosle.log(‘吃東西’)}
static sayHi(){
console.log(‘大家好’)
}
}
8.class實現(xiàn)繼承
class Tigger extends Animal{
constructor(props){
super(props)
}
}
9.談一下對async。。。。await的理解
async...await是基于promise的generator語法糖,它用來等待promise的執(zhí)行結(jié)果,常規(guī)函數(shù)使用await沒有效果;async修飾的函數(shù)內(nèi)部return不會得到預(yù)期的結(jié)果,會得到一個promise對象;await等待的promise結(jié)果是resolve狀態(tài)的內(nèi)容,reject狀態(tài)的內(nèi)容需要使用try...catch獲取,await關(guān)鍵字必須要出現(xiàn)在async修飾的函數(shù)中,否則報錯。
10.ES6中的symbol類型有什么作用
ES6新增了Symbol數(shù)據(jù)類型,它用來生成一個獨一無二的值,它Symbol數(shù)據(jù)常用來給對象屬性賦值,讓對象屬性具備唯一性,不容易被覆蓋。
11.class類中的super有哪些用法
Super在類中有兩種用法,一個是super方法,一個是super對象;super方法只能出現(xiàn)在constructor方法中,super對象一般出現(xiàn)在子類覆蓋父類的方法中。
12.靜態(tài)和成員的區(qū)別
靜態(tài)的變量或方法歸類所有,全局獨一份,成員的變量或方法歸對象所有,每次實例化對象成員方法和成員變量就會得到一份拷貝;對于一些通用性的屬性或方法,可以考慮設(shè)置為靜態(tài)。
13.談一體你多promise的理解
Promise用來解決異步回調(diào)問題,由于js是單線程的,很多異步操作都是依靠回調(diào)方法實現(xiàn)的,這種做法在邏輯比較復(fù)雜的回調(diào)嵌套中會相當(dāng)復(fù)雜;也叫做回調(diào)地獄;promise用來將這種繁雜的做法簡化,讓程序更具備可讀性,可維護性;promise內(nèi)部有三種狀態(tài),pedding,fulfilled,rejected;pedding表示程序正在執(zhí)行但未得到結(jié)果,即異步操作沒有執(zhí)行完畢,fulfilled表示程序執(zhí)行完畢,且執(zhí)行成功,rejected表示執(zhí)行完畢但失敗;這里的成功和失敗都是邏輯意義上的;并非是要報錯。其實,promise和回調(diào)函數(shù)一樣,都是要解決數(shù)據(jù)的傳遞和消息發(fā)送問題,promise中的then一般對應(yīng)成功后的數(shù)據(jù)處理,catch一般對應(yīng)失敗后的數(shù)據(jù)處理。Promise狀態(tài)一旦確定,就不會再次發(fā)生改變
14.深拷貝的原理
Js的深拷貝發(fā)生在對象的賦值上,對象賦值的時候僅僅是一個引用賦值,也就是說兩個不同變量名指向的是同一份內(nèi)存空間;基本數(shù)據(jù)類型則不存在這樣的行為;要完成對象的深拷貝需要使用遞歸遍歷所有對象的屬性進(jìn)行賦值,也可以使用JSON.stringfy和JSON.parse操作。
15.set和map的區(qū)別
Set是一種類似數(shù)組的集合類型,它與數(shù)組不同的是,不允許存在重復(fù)數(shù)據(jù);常用操作方法有:add,delete,has,clear等;遍歷使用forEach;
Map是一種類似對象的集合類型,它與對象不同的是,key可以接受對象類型,常用的操作方法有:set,get,has,delete等;遍歷使用forEach
16.node的特點是什么
1)它是一個Javascript運行環(huán)境
2)依賴于Chrome V8引擎進(jìn)行代碼解釋
3)事件驅(qū)動
4)非阻塞I/O
5)輕量、可伸縮,適于實時數(shù)據(jù)交互應(yīng)用
6)單進(jìn)程,單線程
17.module.exports和exports的區(qū)別,請用代碼示范
Exports和module.exports的區(qū)別:
1)exports相當(dāng)于在js文件的首行寫了let exports = module.exports;(但是實際情況不需要寫,否則報錯)
2)exports不可以直接賦值,如果直接賦值相當(dāng)于與module.exports切斷了聯(lián)系,沒有了導(dǎo)出功能;
3)如果exports和module.exports同時導(dǎo)出,exports就失去了導(dǎo)出的功能;
4)注意點:module.exports只使用一次即可,多個變量輸出的時候,可以使用對象的形式
18.MIME類型有什么作用
MIME的全稱是Multipurpose Internet Mail Extensions,即多用途互聯(lián)網(wǎng)郵件擴展類型。這是HTTP協(xié)議中用來定義文檔性質(zhì)及格式的標(biāo)準(zhǔn)。服務(wù)器通過MIME告知響應(yīng)內(nèi)容類型,而瀏覽器則通過MIME類型來確定如何處理文檔。
常見MIME類型:
application/octet-stream?未知的應(yīng)用程序文件
application/json?json數(shù)據(jù)
text/plain未知的文本文件(純文本文件),瀏覽器會認(rèn)為這是可以直接顯示的
注:?瀏覽器分辨文件是基于MIME的,而不會把文件打開查看是否是其他類型,例如用link鏈接了一個標(biāo)記為text/plain的文件,就算此文件是css文件,就算其后綴是.css,瀏覽器依舊不認(rèn)
text/css?css文件
text/html?HTML文件
image/gif?gif文件
常見的還有image/jpeg、image/png、image/svg
很多瀏覽器支持icon image/x-icon
let和var的區(qū)別
1)let是塊作用域,var是函數(shù)作用域
2)let沒有變量聲明提升,var有聲明提升
3)存在暫時性死區(qū)(TDZ),暫時性死區(qū)所指的問題基本都是 先聲明后使用的問題
4)在let聲明變量所在的作用域,不能重復(fù)聲明同名變量
20.iterator的作用是什么,怎么布置iterator接口。
1、統(tǒng)一數(shù)據(jù)結(jié)構(gòu)(數(shù)組,對象,map,set,數(shù)組包對象,對象包數(shù)組)的遍歷方式
2、在數(shù)據(jù)結(jié)構(gòu)上部署iterator接口:所謂的部署接口表現(xiàn)形式為,給對象或數(shù)組等集合增加iterator屬性,屬性的內(nèi)容是一個根據(jù)iterator接口規(guī)范自行實現(xiàn)的方法
21cookie和session的區(qū)別
session是區(qū)別于數(shù)據(jù)庫存在的一種服務(wù)器臨時存儲技術(shù), 它主要存儲一些無需持久化的數(shù)據(jù), 比如臨時的登錄狀態(tài)信息等
cookie是存在于瀏覽器上的一種瀏覽器本地存儲的方式, 同域名下的cookie不同標(biāo)簽頁可以共享, 默認(rèn)過期時間是瀏覽器關(guān)閉時, 而且在進(jìn)行http請求時, 會自動帶上瀏覽器全部的cookie發(fā)給后臺, 后臺也可以獲取cookie, 設(shè)置可以在響應(yīng)時, 想瀏覽器中設(shè)置cookie。