html
1.元素
塊級元素: 一行一個(gè), 可以控制寬高 ,內(nèi)邊距外邊距, 寬度默認(rèn)是父級寬度100%
行內(nèi)元素: 一行很多個(gè), 寬高無效, 左右內(nèi)外邊距有效 寬度默認(rèn)為內(nèi)容寬度撐開
行內(nèi)塊元素: 一行很多個(gè)有間隙, 可控制寬高, 內(nèi)外邊距 寬度默認(rèn)為內(nèi)容寬度撐開
2.localStorage、sessionStorage、cookie區(qū)別

3.網(wǎng)站TDK三大標(biāo)簽以及SEO優(yōu)化
Title(標(biāo)題):Title 標(biāo)簽用于定義網(wǎng)頁的標(biāo)題,是搜索引擎顯示在搜索結(jié)果中的標(biāo)題文字,同時(shí)也是瀏覽器標(biāo)簽頁上顯示的標(biāo)題。
Description(描述):Description 標(biāo)簽用于定義網(wǎng)頁的描述,是搜索引擎顯示在搜索結(jié)果中的網(wǎng)頁描述文字,幫助用戶了解頁面內(nèi)容。
Keywords(關(guān)鍵詞): Keywords 標(biāo)簽曾經(jīng)被用于定義網(wǎng)頁的關(guān)鍵詞,但由于被濫用和誤解,目前大多數(shù)搜索引擎已不再依賴于 Keywords 標(biāo)簽。
語義化標(biāo)簽是 H5 新特性,語義化標(biāo)簽有:<header> 定義頁面的頭部,<footer> 定義頁面尾部,<nav> 定義導(dǎo)航鏈接,<article> 內(nèi)容標(biāo)簽等。
css
1.如何用CSS3畫一條0.5px的直線?
height: 1px;
transform: scale(0.5);
2.CSS3盒子模型:標(biāo)準(zhǔn)盒模型、怪異盒模型
box-sizing: content-box:默認(rèn)值標(biāo)準(zhǔn)盒模型下盒子的大小 = content + border + padding + margin
box-sizing: border-box:border 和 padding 劃歸到 width 范圍內(nèi),可以理解為是 IE 的怪異盒模型,怪異盒模型下盒子的大小=width(content + border + padding) + margin
3.清除浮動
- 尾部新增元素 clear: both; /* 清除兩側(cè)的浮動 */
- 父級元素增加: overflow: hidden
- 偽元素 clearfix::after { display: block; content: ""; height: 0; overflow: hidden; clear: both; } .clearfix { zoom: 1; }
4.Flex布局

5.偽元素和偽類的區(qū)別和作用?
偽元素:在內(nèi)容元素的前后插入額外的元素或樣式,但是這些元素實(shí)際上并不在文檔中生成。它們只在外部顯示可見,但不會在文檔的源代碼中找到它們,因此,稱為“偽”元素。例如:
p::before {content:"第一章:";}
p::after {content:"Hot!";}
p::first-line {background:red;}
p::first-letter {font-size:30px;}
偽類:將特殊的效果添加到特定選擇器上。它是已有元素上添加類別的,不會產(chǎn)生新的元素。例如:
a:hover {color: #FF00FF}
p:first-child {color: red}
6.px、em、rem 的區(qū)別?
px:像素是最常用的單位之一,用于屏幕上的精確布局。1像素等于屏幕的一個(gè)點(diǎn)。
em:em是基于當(dāng)前元素的字體大小的單位。例如,1em等于當(dāng)前元素的字體大小。
rem:rem基于根元素(html元素)的字體大小的單位。1rem等于根元素的字體大小。
%:相對于父元素的尺寸進(jìn)行縮放。例如,width: 50%;會使元素的寬度是其父元素寬度的50%。
vw--vh:vw(Viewport Width)和vh(Viewport Height)分別基于視口的寬度和高度。例如,1vw等于視口寬度的1%。
JavaScript
1、JS基礎(chǔ)類型和復(fù)雜類型
JS數(shù)據(jù)基礎(chǔ)類型有:
String、Number、Boolean、Null、undefined五種基本數(shù)據(jù)類型,加上新增的兩種ES6的類型Symbol、BigInt
JS有三種 復(fù)雜類型 (引用數(shù)據(jù)類型):
Object(對象)、Array(數(shù)組)、function(函數(shù))
2、箭頭函數(shù)與普通函數(shù)的區(qū)別?
(2) 箭頭函數(shù)沒有自己的this
它只會在自己作用域的上一層繼承this。所以箭頭函數(shù)中this的指向在它在定義時(shí)已經(jīng)確定了, 之后不會改變。
(3) call()、apply()、bind()等方法不能改變箭頭函數(shù)中this的指向
(4) 箭頭函數(shù)沒有自己的arguments對象。在箭頭函數(shù)中訪問arguments實(shí)際上獲得的是它外層函數(shù)的arguments值。
3、null和undefined區(qū)別
undefined: 變量被聲明了還沒有賦值,就為undefined
null: null表示一個(gè)值被定義了,但是這個(gè)值是空值
typeof null; // 'object'
typeof undefined; // 'undefined'
4、閉包的理解?
內(nèi)部函數(shù)訪問外部函數(shù)的一個(gè)變量就會形成閉包
變量會一直在內(nèi)存中, 持久化存儲數(shù)據(jù)到內(nèi)存中
function outerFunction() {
let outerVariable = '我是外部變量';
function innerFunction() {
console.log(outerVariable); // 訪問外部函數(shù)的變量
}
return innerFunction;
}
- js數(shù)組放法
push:往數(shù)組尾部添加一個(gè)元素。 返回?cái)?shù)組的長度。
unshift:往數(shù)組頭部添加一個(gè)元素。返回?cái)?shù)組的長度。
pop:從數(shù)組尾部刪除一個(gè)元素。返回刪除的元素。
shift:從數(shù)組頭部刪除一個(gè)元素。返回刪除的元素。
slice(開始位置,結(jié)束位置):截取數(shù)組一部分。只有一個(gè)元素則是開始位置,直到截取全部
splice(開始位置,長度,插入元素):刪除、修改數(shù)組中的一部分元素。
reverse:反轉(zhuǎn)數(shù)組。返回反轉(zhuǎn)后的數(shù)組。
sort:對數(shù)組的元素進(jìn)行排序。返回排序后的數(shù)組。
join:把數(shù)組變成字符串。若括號里什么都不寫,則默認(rèn)用逗號分隔。
toString:把數(shù)組變成字符串。
split:把字符串變成數(shù)組。
concat:合并數(shù)組,并返回結(jié)果。擴(kuò)展運(yùn)算符也可以合并數(shù)組。
Math.min:返回?cái)?shù)組最小值元素。
Math.max:返回?cái)?shù)組最大值元素。
length:獲取當(dāng)前數(shù)組的長度。
查找方法:
indexOf:查找數(shù)組元素,返回第一個(gè)找到的元素下標(biāo),找不到返回-1。
includes: 查找數(shù)組是否包含某一元素,包含則返回 true,不包含返回 false。
for…in:遍歷數(shù)組。會遍歷數(shù)組內(nèi)所有可枚舉的屬性,包括原型上的屬性和方法。
forEach:遍歷數(shù)組。不會生成新數(shù)組,也不改變原數(shù)組,回調(diào)函數(shù)接收三個(gè)值:( 數(shù)組的元素,索引,當(dāng)前數(shù)組)
map:通過指定函數(shù)處理數(shù)組的每個(gè)元素,并返回處理后的數(shù)組。不會對空數(shù)組進(jìn)行檢測,不會改變原始數(shù)組。
filter:過濾,檢測數(shù)組元素,并返回符合條件所有元素的數(shù)組。
some:檢測數(shù)組元素中是否有元素符合指定條件,有則返回 true,若所有元素都不滿足判斷條件,則返回 false。
修改原數(shù)組:push、pop、shift、unshift、splice、reverse、sort、fill。
不修改原數(shù)組:slice、concat、indexOf、lastIndexOf、join、toString、filter、every、some、forEach、map、find、findIndex。
for循環(huán)和forEach有什么區(qū)別???
for 循環(huán)的 return 是終止循環(huán) forEach 是返回參數(shù)。
for 循環(huán)實(shí)際上是可以使用 break 和 continue 去終止循環(huán)的,但是 forEach 不行。
forEach 不支持在循環(huán)中添加刪除操作。
for 多數(shù)時(shí)候都可以使用,一般我們需要知道循環(huán)次數(shù)。而 forEach 更適合于集合對象的遍歷和操作。
var、let和const的區(qū)別?
作用域 -- 變量提升 -- 重復(fù)申明 -- 是否可以改變call、apply和bind區(qū)別
1)傳入?yún)?shù)格式的區(qū)別
call 和 bind傳入的是參數(shù)是一個(gè)個(gè)傳入的,用逗號分隔;apply 傳入的是數(shù)組,也可以是類數(shù)組
2)執(zhí)行時(shí)機(jī)的區(qū)別
call 和 apply 會立即調(diào)用,而 bind 返回的是一個(gè)改變了 this 指向的函數(shù),你必須調(diào)用它才會被執(zhí)行;
8.淺拷貝和深拷貝區(qū)別概念常見情況?
9.事件循環(huán),Promise和async/await的詳解
17、函數(shù)的防抖和節(jié)流是什么?
(1) 防抖:通過 setTimeout 的方式,在一定的時(shí)間間隔內(nèi),將多次觸發(fā)變成一次觸發(fā)。
(2) 節(jié)流:讓一個(gè)函數(shù)無法在很短的時(shí)間間隔內(nèi)連續(xù)調(diào)用,而是間隔一段時(shí)間執(zhí)行,降低觸發(fā)頻率。
42、解決跨域的幾種方法?
(1) CORS 跨域資源共享(cross-origin-resource-sharing)
服務(wù)器端對于 CORS 的支持,主要就是通過設(shè)置 Access-Control-Allow-Origin 來進(jìn)行的。如果瀏覽器檢測到相應(yīng)的設(shè)置,就可以允許 Ajax 進(jìn)行跨域的訪問——也就是常說的服務(wù)器加請求頭。前端無需做任何事情,只需要后端使用第三方模塊添加響應(yīng)頭即可。
(2) JSONP 解決跨域
借助 script 標(biāo)簽不受同源策略的影響進(jìn)行數(shù)據(jù)請求。動態(tài)插入 script 標(biāo)簽,通過 script 標(biāo)簽引入一個(gè) js 文件,這個(gè) js 文件載入成功后會執(zhí)行我們在 url 參數(shù)中指定的函數(shù),并且會把我們需要的 json 數(shù)據(jù)作為參數(shù)傳入。注意:只支持 GET 請求,不過兼容性比較好,無法判斷請求是否失敗,安全性不高。
(3) proxy 代理轉(zhuǎn)發(fā)
正向代理:借助于我們的服務(wù)器,向數(shù)據(jù)服務(wù)器發(fā)送數(shù)據(jù);
反向代理:與正向代理類似,但是不借助于腳本,而是直接使用服務(wù)器映射 url。
55.防抖與節(jié)流的區(qū)別,并分別用代碼表示 ??
防抖:觸發(fā)高頻事件后 n 秒內(nèi)函數(shù)只會執(zhí)行一次,如果 n 秒內(nèi)高頻事件再次被觸發(fā),則重新計(jì)算時(shí)間。作用:防止事件連續(xù)或高頻觸發(fā),讓它只觸發(fā)一次或者最后一次。
節(jié)流:高頻事件觸發(fā),但在 n 秒內(nèi)只會執(zhí)行一次,所以節(jié)流會稀釋函數(shù)的執(zhí)行頻率。作用:降低事件觸發(fā)的頻率,比如1s內(nèi)最多執(zhí)行一次。
TypeScript
TypeScript 的內(nèi)置數(shù)據(jù)類型有哪些?
number:表示數(shù)字類型,包括整數(shù)和浮點(diǎn)數(shù)。
string:表示字符串類型,用于表示文本數(shù)據(jù)。
boolean:表示布爾類型,只有兩個(gè)可能的值:true 和 false。
null: 空值。
undefined:未定義的值。
object:表示非原始類型的對象,可以是任意結(jié)構(gòu)的對象。
array:表示數(shù)組類型,可用于存儲多個(gè)相同類型的元素。
tuple:表示元組類型,用于表示具有固定數(shù)量和特定順序的元素組合。
enum:表示枚舉類型,用于定義一組命名的常量值。
any:表示動態(tài)類型,可以接受任何類型的值。
void:表示空類型,沒有任何返回值的類型。
never:表示永遠(yuǎn)不存在的類型,通常用于表示永遠(yuǎn)不會返回的函數(shù)的返回類型。
unknown:表示未知類型,類似于 any,但對類型安全要求更嚴(yán)格。
vue
虛擬DOM DIFF算法
父子生命周期
父beforeCreate -> 父created -> 父beforeMount -> 子beforeCreate -> 子created -> 子beforeMount -> 子mounted -> 父mounted
第一次頁面加載會觸發(fā)哪幾個(gè)鉤子?
beforeCreate,created,beforeMount,mounted
如果加入了 keep-alive 多兩個(gè)生命周期:
activated,deactiated