一、CSS和JS在網(wǎng)頁中的放置順序是怎樣的?
js引入樣式:
1尔苦、內(nèi)部js樣式
<script>alert(1);</script>
2、引入外部js樣式
<script type="text/javascript" src="index.js"></script>
css引入樣式:
1行施、內(nèi)嵌css樣式
<h1 style="color:red">aaa</h1>
2允坚、內(nèi)部樣式表
.h1{color:red;}
3、外鏈樣式表
<style t type="text/css src="**.css"></style
放置的時候是css放在網(wǎng)頁前端蛾号,一般是放在head標簽里稠项,js放后面,一般放在body標簽的底部鲜结。js只能一個一個加載展运,而css可以同時加載2個-4個活逆。
二、解釋白屏和FOUC
網(wǎng)頁渲染的時候拗胜,如果css文件放在最后蔗候,瀏覽器的解析方式是等到所有的樣式(包括外置樣式)即外鏈css文件,解析完成埂软,再與有重復設置的內(nèi)置樣式進行合并锈遥,之后再對html渲染。過程比較漫長時勘畔,瀏覽器頁面是不顯示內(nèi)容的所灸,需要等到所有內(nèi)容合并后,才進行渲染咖杂,就是白屏庆寺。
FOUC是無樣式內(nèi)容閃爍。 網(wǎng)頁渲染的時候诉字,瀏覽器的解析方式是按照出現(xiàn)的先后順序懦尝,先出現(xiàn)樣式的先渲染,遇到新的樣式再渲染一遍壤圃,遇到外鏈的css陵霉,再解析,遇到js再解析伍绳。逐步加載無樣式的內(nèi)容踊挠,等css完全解析后頁面樣式突然展現(xiàn),會出現(xiàn)頁面閃爍冲杀。
三效床、async和defer的作用是什么?有什么區(qū)別
async和defer都是異步加載权谁。
沒有defer或async時剩檀,瀏覽器會立即加載并執(zhí)行指定的腳本。立即是指在渲染script標簽下的內(nèi)容渲染之前旺芽,不等后續(xù)載入html的文檔元素沪猴,就加載執(zhí)行js。異步加載多用于1采章、一鍵分享2运嗜、網(wǎng)站數(shù)據(jù)統(tǒng)計
有async和defer,會加載完成script標簽下的內(nèi)容悯舟,再往后加載執(zhí)行担租。
async與defer的區(qū)別是
async不保證順序,加載js,也加載內(nèi)容抵怎。
defer是再加載完成html內(nèi)容后翩活,再加載js阱洪。
四便贵、簡述網(wǎng)頁的渲染機制
當瀏覽器打開一個頁面時菠镇,首先加載html內(nèi)容將HTML文件解析成DOM,接下來有兩種方式:第一種等到所有的樣式(包括外置樣式)即css文件,將CSS文件解析成CSSOM,解析完成承璃,再與有重復設置的內(nèi)置樣式進行合并利耍,將DOM和CSSOM合成一顆渲染樹,計算出渲染樹的布局,將渲染樹繪制到屏幕,即對html渲染。
將HTML文件解析成DOM盔粹,第二種隘梨,按照出現(xiàn)的先后順序,先出現(xiàn)樣式的先渲染舷嗡,將CSS文件解析成CSSOM轴猎;將DOM和CSSOM合成一顆渲染樹,計算出渲染樹的布局,將渲染樹繪制到屏幕,遇到新的樣式再渲染一遍进萄,遇到外鏈的css捻脖,再解析,遇到js再解析中鼠。
五可婶、JavaScript 定義了幾種數(shù)據(jù)類型? 哪些是簡單類型?哪些是復雜類型?
一共6種
Null:null(只有一個值)是空指針,不存在任何東西援雇,運行會報錯矛渴;
Undefined:undefined(只有一個值)表示變量只被聲明,沒有被初始化惫搏,也就是有這個指針具温,但是這個指針沒有指向任何空間。運行會顯示undefined筐赔,不會報錯铣猩;
Boolean:true/false(兩個值)
Number是有范圍的,并不是所有的數(shù)字川陆。包括整數(shù)和浮點數(shù)剂习,可以表示十進制、八進制较沪、十六進制鳞绕;
String字符串,內(nèi)容在雙引號或者單引號內(nèi)包括尸曼;
Object對象们何,一種無序的數(shù)據(jù)集合,由若干個對象的屬性構成控轿。
簡單類型的數(shù)據(jù)有Null冤竹、Undefined拂封、Bollean、Number鹦蠕、String
復雜類型的數(shù)據(jù)有Object
六冒签、NaN、undefined钟病、null分別代表什么?
NaN全稱是Not a number 就是看起來不是數(shù)字萧恕,但是數(shù)據(jù)類型又屬于Number,一般都是被強制轉(zhuǎn)化的。NaN和任何值都不相等肠阱,包括自己
undefined變量只被聲明票唆,沒有初始化,運行會顯示undefined屹徘,不會報錯
null是空指針走趋,不存在任何東西,運行會報錯
七噪伊、typeof和instanceof的作用和區(qū)別?
typeof和instanceof作用都是返回一個值的數(shù)據(jù)類型簿煌,常用來判斷一個變量是否為空
typeof返回值可以是number、string酥宴、boolean啦吧、undefinded,object;來確認該值的數(shù)據(jù)類型拙寡;而instanceof是用來判斷一個變量是否是某個對象的實例授滓,返回值是布爾型,以確定該變量是否為指定類型肆糕。
代碼部分
1般堆、完成如下代碼判斷一個變量是否是數(shù)字、字符串诚啃、布爾淮摔、函數(shù) (難度*)
運行結果如:
2、以下代碼的輸出結果是?(難度**)
其中始赎,console.log(1+1);當2個參數(shù)都是數(shù)字的時候和橙,會做加法運算,輸出的仍是數(shù)字造垛。
console.log("2"+"4");當2個參數(shù)都是字符串做字符串拼接魔招。
console.log(2+"4"); 當2個參數(shù)中有一個是字符串的情況下會把另一個非字符串的參數(shù)轉(zhuǎn)換為字符串,做字符串拼接五辽。
console.log(+new Date()); 將返回的當前日期办斑、時間轉(zhuǎn)換成毫秒, '1970/01/01 00:00:00' 為起點
console.log(+"4");+將字符串轉(zhuǎn)換成數(shù)字。
3乡翅、以下代碼的輸出結果是? (難度***)
var a = 1;
a+++a;
typeof a+2;
var a = 1;是給a賦值為1鳞疲,即a=1;
a+++a;由于a++的優(yōu)先級高于++a高于+a蠕蚜,所以先計算a++尚洽,值為2再計算2+a,值為3波势,此時a=3;
typeof a+2;根據(jù)優(yōu)先級翎朱,先typeof a得出是number,再+2尺铣,相當于將2轉(zhuǎn)化為字符串,再拼合争舞。
4凛忿、遍歷數(shù)組,把數(shù)組里的打印數(shù)組每一項的平方 (難度**)
var arr = [3,4,5]// todo..// 輸出 9, 16, 25
5竞川、遍歷 JSON, 打印里面的值 (難度**)
var obj = { name: 'hunger', sex: 'male', age: 28}//todo ...// 輸出 name: hunger, sex: male, age:28
6店溢、下面代碼的輸出是? 為什么 (難度***)
console.log(a);var a = 1;console.log(a);console.log(b);