JS基本語法

  • CSS和JS在網(wǎng)頁中的放置順序是怎樣的?
    主要取決于哪個文件需要先被瀏覽器渲染,一般情況下css需要先被瀏覽器渲染,否則網(wǎng)頁可能會出現(xiàn)先加載html而沒有css樣式的情況,然后如果把js也放在前面,會導致下載的時間太長,頁面一直沒有內(nèi)容,出現(xiàn)白屏的情況,所以
    • css放在<head>標簽中先加載
    • js放在</body>之前加載
2016-08-11_221605.png
  • 解釋白屏和FOUC
    • 白屏的主要原因是瀏覽器阻塞,每當在<head>標簽有script的外部文件的時候,瀏覽器就需要產(chǎn)生一個網(wǎng)絡請求,而如果這個外部文件不下載執(zhí)行完成是不會執(zhí)行接下來的htm文件的,所以如果在<head>標簽中有較大的script外部文件或者較多的script文件,就有可能因為瀏覽器阻塞而產(chǎn)生白屏
    • FOUC(Flash Of Unstyled Content),就是無樣式內(nèi)容閃動,當CSS文件放在頁面尾部,html會先被加載和渲染出來,直到遇到一個CSS文件,才會把CSS的規(guī)則渲染在html文件上,所以如果把css放在頁面尾部,就可能出現(xiàn)這樣短暫的閃動
  • async和defer的作用是什么?有什么區(qū)別
    我們先來看當瀏覽器加載頁面發(fā)生了什么,瀏覽器搜先獲取一個html文件,然后開始解析這個html文件,直到解析器遇到一個引用外部文件的<script>標簽,然后瀏覽器會下載并執(zhí)行這個外部的js文件,與此同時,瀏覽器會停止繼續(xù)解析剩下的html文件直到外部的js文件執(zhí)行完畢,之所以解析器遇到外部的script瀏覽器會發(fā)生阻塞是因為外部的js文件中可能有document.write()或者對DOM的操作,也些比較老的建議是把外部的script文件放在</body>之前,但是對于大型網(wǎng)站來說,能夠盡快下載并執(zhí)行js文件是很重要的,script標簽中的async和defer屬性相當于告訴瀏覽器可以放心的先執(zhí)行接下來的代碼,所以不會照成瀏覽器阻塞
    • async,表示的是異步下載js文件,但是有async屬性的js文件是誰先下載好誰先執(zhí)行,下圖中的script2.js就有可能比script1.js先執(zhí)行,所以如果對js的執(zhí)行順序有要求的話,就不能使用async屬性


      2016-08-12_123439.png

      這是在caniuse查詢的兼容性,在IE<10的版本不支持這個屬性


      2016-08-12_130030.png
    • defer,表示的是當整個html文件加載完成后再執(zhí)行js文件,注意,會立即加載但不會馬上執(zhí)行。但是js文件的執(zhí)行是有順序的,下圖中的script1.js會比script2.js先執(zhí)行


      2016-08-12_123505.png

      這是在caniuse查詢的兼容性,在IE<10只有部分支持,可能會交錯的執(zhí)行腳本


      2016-08-12_125415.png
  • 簡述網(wǎng)頁的渲染機制
    這主要是渲染引擎的工作,不包括js引擎
    • 解析html構(gòu)建dom tree,解析css構(gòu)建cssom tree
    • 把dom tree和cssom tree結(jié)合成render tree
    • 布局render tree
    • 繪制render tree

2016-07-30.gif

2016-08-12_144122.png

參考:
瀏覽器渲染機制
高性能WEB開發(fā)系列

  • JavaScript 定義了幾種數(shù)據(jù)類型? 哪些是簡單類型?哪些是復雜類型?
    • Number
    • String
    • Boolean
    • Undefined
    • Null
    • Object

JS定義了6種數(shù)據(jù)類型,一個數(shù)據(jù)的類型必定是上面的一種,其中Number、String、Boolean、Undefined、Null是簡單的數(shù)據(jù)類型,Object是復雜類型

  • NaN、undefined、null分別代表什么?
    • NaN,是number類型中一個特殊的值,即Not A Number,表示本來要返回數(shù)值卻沒有返回數(shù)值的情況,主要出現(xiàn)在字符串解析成數(shù)字出錯的場合


      2016-08-12_145525.png

      2016-08-12_150328.png

      NaN有兩個特點,第一,任何與NaN有關的操作返回的都是NaN,第二,NaN不與任何數(shù)相等,包括他的本身


      2016-08-12_150716.png

      ECMAscript定義了一個isNaN()的函數(shù),在該函數(shù)接受一個參數(shù),可以判斷參數(shù)是否是非數(shù)值,isNaN()接收到一個值之后,會嘗試把這個值轉(zhuǎn)換為數(shù)值
      2016-08-12_151220.png
    • undefined,如果一個變量聲明了但是未賦值,那么這個變量的值就是undefined,注意,如果變量未聲明就直接調(diào)用會拋出錯誤


      2016-08-12_151614.png
    • null,如果一個變量將用來保存對象,最好將該對象初始化為null,這樣,直接判斷一個變量是否為null就可以知道該變量是否保存了對一個對象的引用
  • typeof和instanceof的作用和區(qū)別?
    • typpeof,是一個操作符,所返回的值有'number','string','boolean','undefined','obejct','function',因為js的變量類型是松散的,所以就需要一種手段來檢測給定變量的數(shù)據(jù)類型,常用來判斷簡單的數(shù)據(jù)類型


      2016-08-12_153426.png
    • instanceof,typeof只能判斷一個變量是對象,但是往往我們想知道是哪種引用類型的對象,所以就需要instanceof,判斷一個變量是否是一個引用類型的實例,instanceof也是一個操作符


      2016-08-12_154909.png
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容