初識(shí)JS

1.CSS和JS在網(wǎng)頁(yè)中的放置順序是怎樣的挟裂?

  • CSS
    引用外部樣式表時(shí),使用<link>標(biāo)簽割岛,將樣式放在<head>標(biāo)簽中;直接在html中使用樣式時(shí)犯助,在<head>標(biāo)簽中添加<style>標(biāo)簽癣漆,將樣式寫在<style>標(biāo)簽中。
  • JS
    如果在<head>里有javascript文件剂买,那么必須是先要把這些文件都下載惠爽,解析,然后執(zhí)行之后瞬哼,程序才會(huì)繼續(xù)往下走婚肆。這樣勢(shì)必會(huì)影響速度,阻塞其他資源的加載坐慰,影響頁(yè)面速度较性,所以一般將JS的內(nèi)容放在<body>標(biāo)簽的末尾,寫在<script>標(biāo)簽中结胀;但如果是希望DOM還沒加載而要先加載的js會(huì)放置在<head>中,有些加了defer赞咙、async<script>也會(huì)放在<head>中。

2.解釋白屏和FOUC

  • 不同瀏覽器對(duì)于CSS和HTML的處理方式不同糟港,一些瀏覽器如chrome攀操,它的加載和渲染機(jī)制是等css全部加載解析完成后再渲染展示整個(gè)頁(yè)面,這個(gè)等待的時(shí)間就造成了白屏秸抚,而另一些瀏覽器如Firefox速和,它在css沒有加載前先展示頁(yè)面歹垫,等css加載后在重繪一次,這就造成了FOUC((Flash of Unstyled Content),即無(wú)樣式閃爍颠放。
  • 如果把css樣式放在底部排惨,對(duì)于IE瀏覽器,在某些場(chǎng)景下(新窗口打開慈迈、刷新等)會(huì)出現(xiàn)白屏若贮;同樣對(duì)于IE瀏覽器,如果把css樣式放在底部痒留,在某些場(chǎng)景下(點(diǎn)擊鏈接谴麦,輸入U(xiǎn)RL,使用書簽進(jìn)入等)伸头,會(huì)出現(xiàn)FOUC現(xiàn)象匾效;對(duì)于Firefox,會(huì)一直表現(xiàn)出FOUC
  • 如果把JS文件放在頭部恤磷,腳本會(huì)阻塞后面內(nèi)容的呈現(xiàn)面哼,出現(xiàn)白屏。

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

<script defer src="script.js"></script>
<script async src="script.js"></script>
如圖魔策,藍(lán)色線代表網(wǎng)絡(luò)讀取,紅色線代表執(zhí)行時(shí)間河胎,這倆都是針對(duì)腳本的闯袒;綠色線代表 HTML 解析。

  • defer和async是腳本異步加載的兩種方式游岳,加載后續(xù)文檔元素的過程和script.js的加載并行進(jìn)行(異步)政敢,不因?yàn)槟_本的加載阻塞頁(yè)面其他元素的加載∨咂龋【async和defer均只適用在外部js文本喷户,不支持嵌入式腳本】

  • async:告訴瀏覽器立刻下載其指定的JS,很有可能不是按照原來(lái)的順序來(lái)執(zhí)行访锻,如果JS前后有依賴關(guān)系褪尝,就會(huì)報(bào)錯(cuò)

  • defer:script.js的執(zhí)行要在所有元素解析完成之后,DOMContentLoaded事件觸發(fā)之前完成朗若,也就是說defer會(huì)按照加載順序執(zhí)行腳本

4.簡(jiǎn)述網(wǎng)頁(yè)的渲染機(jī)制

1.解析HTML標(biāo)簽恼五,構(gòu)建為DOM樹
2.解析CSS文件,構(gòu)建為CSSOM樹
3.構(gòu)建render樹哭懈,render樹由DOM樹與CSSOM樹組合而成
4.布局render樹灾馒,確定每個(gè)節(jié)點(diǎn)在屏幕上的確切坐標(biāo)
5.繪制,遍歷render樹遣总,使用UI后端層繪制每個(gè)節(jié)點(diǎn)
更多參考見瀏覽器內(nèi)部工作原理

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

  • 簡(jiǎn)單類型:
    1.數(shù)字 number
    2.字符串 string
    3.布爾 boolean
    4.未定義 undefined
    5.空 null
  • 復(fù)雜類型:
    1.對(duì)象 object
    2.數(shù)組 array
    3.函數(shù) function

6.NaN睬罗、undefined轨功、null分別代表什么?

  • NaN:Not a Number,代表非數(shù)字值的特殊值容达,用來(lái)指示某個(gè)值不是數(shù)字(如求負(fù)數(shù)的平方根)古涧。方法parseInt()parseFloat()在不能解析指定的字符串就返回這個(gè)值。
    要注意的是花盐,NaN與其他數(shù)值進(jìn)行比較的結(jié)果總是不相等的羡滑,包括它自身在內(nèi),所以要使用isNaN()來(lái)判斷一個(gè)值知否是數(shù)字
NaN == NaN; //false
NaN===NaN;//false
  • undefined:表示“缺少值”算芯,就是此處應(yīng)該有一個(gè)值柒昏,但是還沒有定義
    (1).變量被聲明了,但沒有賦值熙揍,就等于undefined
    (2).調(diào)用函數(shù)時(shí)职祷,應(yīng)該提供的參數(shù)沒有提供,該參數(shù)等于undefined
    (3).對(duì)象沒有賦值的屬性届囚,該屬性為undefined
var i;
i // undefinedfunction
 f(x){console.log(x)}
f() // undefined
var o = new Object();
o.p // undefined
var x = f();
x // undefined
  • null:一個(gè)空對(duì)象指針有梆,表示“沒有對(duì)象”,即該處不應(yīng)該有值
    (1).作為函數(shù)參數(shù)意系,表示該函數(shù)的參數(shù)不是對(duì)象
    (2).作為原型鏈的終點(diǎn)

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

由于ECMAScript是松散型的泥耀,因而需要一種方式來(lái)檢測(cè)給定變量的數(shù)據(jù)類型。

  • typeof:返回一個(gè)值的數(shù)據(jù)類型蛔添,可以是數(shù)字number爆袍,字符串string,布爾值boolean作郭,函數(shù)function,對(duì)象object,方法typeof中無(wú)論引用什么類型的對(duì)象弦疮,都只會(huì)返回object
  • instanceof:只有true和false兩個(gè)輸出結(jié)果夹攒,可以進(jìn)一步判斷引用類型是什么類型

代碼

1.完成如下代碼判斷一個(gè)變量是否是數(shù)字、字符串胁塞、布爾咏尝、函數(shù) (難度*)ps: 做完后可參考 underscore.js 源碼中部分實(shí)現(xiàn)

function isNumber(el){
    if (typeof el==="number"){
      return true;
    }   
      else{
        return false;
      } 
}
function isString(el){
     if (typeof el==="string"){
      return true;
    }   
      else{
        return false;
      } 
}
function isBoolean(el){
     if (typeof el==="boolean"){
      return true;
    }   
      else{
        return false;
      } 
}
function isFunction(el){
     if (typeof el==="function"){
      return true;
    }   
      else{
        return false;
      } 
}
var a = 2,
    b = "jirengu",
    c = false;
alert( isNumber(a) );  //true
alert( isString(a) );  //false
alert( isString(b) );  //true
alert( isBoolean(c) ); //true
alert( isFunction(a)); //false
alert( isFunction( isNumber ) ); //true

2.以下代碼的輸出結(jié)果是?(難度**)

console.log(1+1); //2
console.log("2"+"4");//24
 console.log(2+"4"); //24
console.log(+new Date());//1471333192537
console.log(+"4");//4

3.以下代碼的輸出結(jié)果是? (難度***)

var a = 1;
a+++a;//3
typeof a+2;//numer2

4.遍歷數(shù)組,把數(shù)組里的打印數(shù)組每一項(xiàng)的平方 (難度**)

var arr = [3,4,5];
for( var i=0;1< arr.length;i++){
console.log(arr[i]*arr[i]);
}

5.遍歷 JSON, 打印里面的值 (難度**)

var obj = {
 name: 'hunger', 
sex: 'male', 
age: 28
}
for (var i in obj){
console.log(i+":"+obj[i]);
}

6.下面代碼的輸出是? 為什么 (難度***)

console.log(a);//undefined,變量聲明提升啸罢,a已經(jīng)聲明過编检,會(huì)被提到全局作用域的開頭
var a = 1;
console.log(a);//1
console.log(b);//報(bào)錯(cuò)

本文版權(quán)歸本人和饑人谷所有,轉(zhuǎn)載請(qǐng)注明來(lái)源扰才。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末允懂,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子衩匣,更是在濱河造成了極大的恐慌蕾总,老刑警劉巖粥航,帶你破解...
    沈念sama閱讀 211,265評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異生百,居然都是意外死亡递雀,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,078評(píng)論 2 385
  • 文/潘曉璐 我一進(jìn)店門蚀浆,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)缀程,“玉大人,你說我怎么就攤上這事市俊「蛲” “怎么了?”我有些...
    開封第一講書人閱讀 156,852評(píng)論 0 347
  • 文/不壞的土叔 我叫張陵赚抡,是天一觀的道長(zhǎng)掷匠。 經(jīng)常有香客問我,道長(zhǎng)据忘,這世上最難降的妖魔是什么鹦牛? 我笑而不...
    開封第一講書人閱讀 56,408評(píng)論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮勇吊,結(jié)果婚禮上曼追,老公的妹妹穿的比我還像新娘。我一直安慰自己汉规,他們只是感情好礼殊,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,445評(píng)論 5 384
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著针史,像睡著了一般晶伦。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上啄枕,一...
    開封第一講書人閱讀 49,772評(píng)論 1 290
  • 那天婚陪,我揣著相機(jī)與錄音,去河邊找鬼频祝。 笑死泌参,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的常空。 我是一名探鬼主播沽一,決...
    沈念sama閱讀 38,921評(píng)論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼漓糙!你這毒婦竟也來(lái)了铣缠?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,688評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎攘残,沒想到半個(gè)月后拙友,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,130評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡歼郭,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,467評(píng)論 2 325
  • 正文 我和宋清朗相戀三年遗契,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片病曾。...
    茶點(diǎn)故事閱讀 38,617評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡牍蜂,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出泰涂,到底是詐尸還是另有隱情鲫竞,我是刑警寧澤,帶...
    沈念sama閱讀 34,276評(píng)論 4 329
  • 正文 年R本政府宣布逼蒙,位于F島的核電站从绘,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏是牢。R本人自食惡果不足惜僵井,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,882評(píng)論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望驳棱。 院中可真熱鬧批什,春花似錦、人聲如沸社搅。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,740評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)形葬。三九已至合呐,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間笙以,已是汗流浹背合砂。 一陣腳步聲響...
    開封第一講書人閱讀 31,967評(píng)論 1 265
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留源织,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,315評(píng)論 2 360
  • 正文 我出身青樓微猖,卻偏偏與公主長(zhǎng)得像谈息,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子凛剥,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,486評(píng)論 2 348

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

  • 1.CSS和JS在網(wǎng)頁(yè)中的放置順序是怎樣的侠仇? css使用link標(biāo)簽引入并放在head標(biāo)簽內(nèi),是為了防止白屏和FO...
    BAWScipes閱讀 213評(píng)論 0 0
  • CSS和JS在網(wǎng)頁(yè)中的放置順序是怎樣的? css是使用link的標(biāo)簽進(jìn)行引入并放置在header標(biāo)簽內(nèi),而js是使...
    村里第一帥閱讀 187評(píng)論 0 0
  • JavaScript基本概念逻炊、基礎(chǔ)數(shù)據(jù)類型互亮、運(yùn)算符、流程控制語(yǔ)句余素。 一豹休、CSS和JS在網(wǎng)頁(yè)中的放置順序是怎樣的? ...
    婷樓沐熙閱讀 434評(píng)論 0 2
  • 概念 1桨吊、CSS和JS在網(wǎng)頁(yè)上的放置順序是怎樣的威根? 將CSS放在head標(biāo)簽中:CSS放在后面會(huì)造成白屏或者FOU...
    周花花啊閱讀 436評(píng)論 1 1
  • 【原文】(14.13) 子問公叔文子于公明賈曰:“信乎,夫子不言视乐,不笑洛搀,不取乎?”公明賈對(duì)曰:“以告者過也佑淀。...
    錢江潮369閱讀 635評(píng)論 0 3