任務(wù)16-JS 語法

1. CSS和JS在網(wǎng)頁中的放置順序是怎樣的俯画?

  • css放在head標(biāo)簽里
  • js放在body標(biāo)簽的最后
    主要是為了避免白屏和FOUC,詳見問答2

2. 解釋白屏和FOUC

白屏與無樣式內(nèi)容閃爍(FOUC,Flash of Unstyled Content)是因為不同瀏覽器加載與顯示頁面的機制不同而造成的亮航。

  • 當(dāng)把css樣式放在底部或者使用@import方式引入樣式時
    一些瀏覽器例如chrome,他的加載和渲染機制是等css全部加載解析完后再渲染展示頁面,而這個等待的時間就為白屏祈争。
  • 另一些瀏覽器例如Firefox,他會在css未加載前先展現(xiàn)頁面,等css加載后再重繪一次,這就造成了FOUC (無樣式內(nèi)容閃爍)穿扳。
  • 當(dāng)<head>元素中包含JavaScript文件時
    必須等到所有的JavaScript代碼都被下載,解析和執(zhí)行完成以后,才能開始呈現(xiàn)頁面的內(nèi)容(瀏覽器遇到<body>標(biāo)簽才開始呈現(xiàn)內(nèi)容).如果JavaScript代碼很多,這會導(dǎo)致頁面呈現(xiàn)延時,延時期間瀏覽器窗口將是一片空白.

所以為了避免這些問題,最好使用LINK標(biāo)簽將CSS樣式表放在<head>標(biāo)簽中,JavaScript引用放在<body>標(biāo)簽的末尾旨涝。

3. async和defer的作用是什么失都?有什么區(qū)別?

當(dāng)瀏覽器碰到 script 腳本的時候:

  • defer是script標(biāo)簽中處理腳本運行的屬性之一立润,中文稱作延時,作用是js在頁面加載后才會運行腳本蟋滴,即同時加載js染厅,延時執(zhí)行js。語法規(guī)則為:
<script src="demo.js" defer="defer"></script>
  • async(HTML5)是script標(biāo)簽中處理腳本運行的另一屬性津函,中文稱作異 步肖粮,作用是腳本會異步加載而不阻塞頁面加載,并且js一旦下載完畢就會立即執(zhí)行尔苦。
<script src="demo.js" async="async"></script>

關(guān)于二者的加載和執(zhí)行方式如下圖所示:

Paste_Image.png

【注意】無論是defer還是async都僅適用于外部腳本
還有幾點要注意:

  • defer腳本會在DOMContentLoaded和load事件之前執(zhí)行;如果有多個聲明了defer的腳本涩馆,則會按順序下載和執(zhí)行
  • async會在load事件之前執(zhí)行行施,但并不能確保與DOMContentLoaded的執(zhí)行先后順序;如果有多個聲明了async的腳本,其下載和執(zhí)行也是異步的魂那,不能確保彼此的先后順序(誰先下載完先執(zhí)行)
  • Js可以改變DOM樹,所以操作 DOM 的Js腳本不要使用 async和defer 如果一定要使用,需要把需要操作 DOM 的部分放在 DOMContentLoaded 事件回調(diào)中執(zhí)行

關(guān)于兼容性:
由CanIUSe可知,
async在IE<=9時不支持蛾号,其他瀏覽器OK
defer在IE<=9時部分支持,其他瀏覽器OK
所以有時會在async不支持的時候啟用defer涯雅,但defer在某些情況下還是有bug

<script async defer src="script.js"></script>

所謂部分支持是指瀏覽器盡管已經(jīng)支持 defer须教,但是沒有嚴(yán)格按照 HTML5 標(biāo)準(zhǔn)處理,這會導(dǎo)致bug斩芭,這個bug在這個Issue中有描述
這也是為什么《javascript高級程序設(shè)計》一書中寫過

“在現(xiàn)實當(dāng)中,延遲腳本并不一定會按照順序執(zhí)行乐疆,也不一定會在DOMContentLoaded事件觸發(fā)前執(zhí)行划乖,因此最好只包含一個延遲腳本”的原因
所以最保險的方法還是把JavaScrpipt引用放在<body>標(biāo)簽的末尾.

4. 簡述網(wǎng)頁的渲染機制

  • 解析文檔并構(gòu)建樹:Html解析以構(gòu)建DOM Tree和Css解析以構(gòu)建Style Rules Tree
  • 構(gòu)建渲染樹Render Tree:此時渲染引擎會將DOM Tree和Style Rules Tree結(jié)合在一起形成Render樹,它由一些包含有顏色和大小等屬性的矩形組成
  • 布局Layout:Render樹構(gòu)建好了之后挤土,將會執(zhí)行布局過程琴庵,它將確定每個節(jié)點在屏幕上的確切坐標(biāo)。
  • 繪制paint:再下一步就是繪制仰美,即遍歷render樹迷殿,并使用UI后端層繪制每個節(jié)點】г樱  

5.JavaScript 定義了幾種數(shù)據(jù)類型? 哪些是簡單類型?哪些是復(fù)雜類型庆寺?

ES5有五種數(shù)據(jù)類型:

  • 數(shù)值(number):整數(shù)和小數(shù)(比如1和3.14)
  • 字符串(string):字符組成的文本(比如”Hello World”)
  • 布爾值(boolean):true(真)和false(假)兩個特定值
  • undefined:表示“未定義”或不存在,即此處目前沒有任何值
  • null:表示空缺诉字,即此處應(yīng)該有一個值懦尝,但目前為空
  • 對象(object):各種值組成的集合 。object為復(fù)雜類型壤圃,其他為簡單類型陵霉。

通常,我們將數(shù)值伍绳、字符串踊挠、布爾值稱為原始類型(primitive type)的值,即它們是最基本的數(shù)據(jù)類型冲杀,不能再細(xì)分了效床。而將對象稱為合成類型(complex type)的值,因為一個對象往往是多個原始類型的值的合成漠趁,可以看作是一個存放各種值的容器扁凛。至于undefined和null,一般將它們看成兩個特殊值闯传。


【注】
1.數(shù)組和函數(shù)算是廣義的對象谨朝,null也屬于對象
2.NaN是一種特殊的數(shù)值

6. NaN卤妒、undefined、null分別代表什么?

  • NaN:表示Not a Number字币,不是一種獨立的數(shù)據(jù)類型则披,而是一種特殊數(shù)值,它的數(shù)據(jù)類型依然屬于Number洗出,只不過數(shù)值計算時不符合計算法則
    0/0//NaNMath.sqrt(-5)//NaN
  • null 是一個表示"無"的對象士复,轉(zhuǎn)為數(shù)值時為0;
  • undefined是一個表示"無"的原始值翩活,轉(zhuǎn)為數(shù)值時為NaN阱洪。

[注意]
設(shè)置一個值為 null 是合理的,如objA.valueA = null;但設(shè)置一個值為 undefined 是不合理的

7. typeof和instanceof的作用和區(qū)別?

  • typeof是返回一個字符串并顯示為參數(shù)數(shù)據(jù)類型的運算符菠镇,但它無法區(qū)分?jǐn)?shù)據(jù)類型object究竟是出自狹義的對象object還是數(shù)組
    示例如下:
typeof 37 === 'number';
typeof "bla" === 'string';
typeof true === 'boolean';
typeof Symbol('foo') === 'symbol';
typeof undefined === 'undefined';
typeof {a:1} === 'object';
typeof [1, 2, 4] === 'object';
typeof function(){} === 'function';

  • instanceof運算符可以用來判斷某個構(gòu)造函數(shù)的prototype屬性所指向的對象是否存在于另外一個要檢測對象的原型鏈上冗荸,簡單的講就是判斷一個變量是否是某個對象(類)的實例,返回值是布爾類型的利耍。
function C(){}     //構(gòu)造函數(shù)
function D(){}     //構(gòu)造函數(shù)
var a = new C();   //創(chuàng)建實例
var b = new D();   //創(chuàng)建實例
var bool1=a instanceof C
var bool2=a instanceof D
//bool1是C對象的實例
console.log(bool1)
//bool2不是C對象的實例
console.log(bool2)
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末蚌本,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子隘梨,更是在濱河造成了極大的恐慌程癌,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,214評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件轴猎,死亡現(xiàn)場離奇詭異嵌莉,居然都是意外死亡,警方通過查閱死者的電腦和手機税稼,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,307評論 2 382
  • 文/潘曉璐 我一進(jìn)店門烦秩,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人郎仆,你說我怎么就攤上這事只祠。” “怎么了扰肌?”我有些...
    開封第一講書人閱讀 152,543評論 0 341
  • 文/不壞的土叔 我叫張陵抛寝,是天一觀的道長。 經(jīng)常有香客問我曙旭,道長盗舰,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,221評論 1 279
  • 正文 為了忘掉前任桂躏,我火速辦了婚禮钻趋,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘剂习。我一直安慰自己蛮位,他們只是感情好较沪,可當(dāng)我...
    茶點故事閱讀 64,224評論 5 371
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著失仁,像睡著了一般尸曼。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上萄焦,一...
    開封第一講書人閱讀 49,007評論 1 284
  • 那天控轿,我揣著相機與錄音,去河邊找鬼拂封。 笑死茬射,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的冒签。 我是一名探鬼主播躲株,決...
    沈念sama閱讀 38,313評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼镣衡!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起档悠,我...
    開封第一講書人閱讀 36,956評論 0 259
  • 序言:老撾萬榮一對情侶失蹤廊鸥,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后辖所,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體惰说,經(jīng)...
    沈念sama閱讀 43,441評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,925評論 2 323
  • 正文 我和宋清朗相戀三年缘回,在試婚紗的時候發(fā)現(xiàn)自己被綠了吆视。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,018評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡酥宴,死狀恐怖啦吧,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情拙寡,我是刑警寧澤授滓,帶...
    沈念sama閱讀 33,685評論 4 322
  • 正文 年R本政府宣布,位于F島的核電站肆糕,受9級特大地震影響般堆,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜诚啃,卻給世界環(huán)境...
    茶點故事閱讀 39,234評論 3 307
  • 文/蒙蒙 一淮摔、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧始赎,春花似錦和橙、人聲如沸仔燕。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,240評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽涨享。三九已至,卻和暖如春仆百,著一層夾襖步出監(jiān)牢的瞬間厕隧,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,464評論 1 261
  • 我被黑心中介騙來泰國打工俄周, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留吁讨,地道東北人。 一個月前我還...
    沈念sama閱讀 45,467評論 2 352
  • 正文 我出身青樓峦朗,卻偏偏與公主長得像建丧,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子波势,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,762評論 2 345

推薦閱讀更多精彩內(nèi)容

  • 學(xué)習(xí)內(nèi)容:JavaScript基本概念翎朱,基礎(chǔ)數(shù)據(jù)類型,運算符尺铣,流程控制語句 一拴曲、CSS和JS在網(wǎng)頁中的放置順序是怎...
    鴻鵠飛天閱讀 494評論 0 0
  • 問答: 1. CSS和JS在網(wǎng)頁中的放置順序是怎樣的? CSS一般放置在的 標(biāo)簽中凛忿。網(wǎng)頁渲染時澈灼,先解析HTML標(biāo)簽...
    小木子2016閱讀 430評論 0 0
  • 1.CSS和JS在網(wǎng)頁中的放置順序是怎樣的叁熔?為什么會出現(xiàn)白屏和FOUC? 在寫HTML代碼時床牧,我們都是將CSS文件...
    26d608950683閱讀 627評論 0 0
  • 問答題 CSS和JS在網(wǎng)頁中的放置順序是怎樣的荣回?答:css:通過link標(biāo)簽將樣式表放在 中。js:放在 中尾部戈咳。...
    饑人谷_桶飯閱讀 282評論 0 0
  • 1.CSS和JS在網(wǎng)頁中的放置順序是怎樣的驹马? 一般而言,CSS放置在網(wǎng)頁文檔的頭部除秀,JS放置在網(wǎng)頁文檔的后面糯累,CS...
    GarenWang閱讀 478評論 0 0