日夜談——js語法

今天我終于踏入JS的大門涯呻,想起來,真有點(diǎn)小興奮腻要,不過复罐,聽說大伙都說JS不太容易學(xué)懂,But I will try to learn it雄家。

New day

<h3>1.CSS和JS在網(wǎng)頁中的放置順序是怎樣的效诅?</h3>
CSS一般放在head標(biāo)簽里面,JS一般放在body標(biāo)簽的尾部。
原因:
<li>因?yàn)镃SS在加載時(shí)乱投,是并發(fā)加載咽笼,并發(fā)請(qǐng)求,不會(huì)阻礙其他資源同時(shí)加載篡腌,而JS加載時(shí)褐荷,會(huì)禁止并發(fā),因此JS加載時(shí)嘹悼,會(huì)阻塞其他資源的加載叛甫,只有等JS加載完之后,才能加載其他資源杨伙,因此把JS放在頂部會(huì)出現(xiàn)白屏現(xiàn)象其监,把CSS放在尾部,會(huì)出現(xiàn)FOUS(無樣式內(nèi)容閃爍)限匣,因此從用戶體驗(yàn)和優(yōu)化網(wǎng)頁性能這點(diǎn)看抖苦,應(yīng)該將CSS放在頂部,JS放在尾部米死。
</br>

<h3>2.解釋白屏和FOUC</h3>
<li>白屏——所謂的白屏锌历,是指CSS加載時(shí)間過長,而HTML加載在CSS之后峦筒,因此會(huì)導(dǎo)致網(wǎng)頁出現(xiàn)白屏——啥內(nèi)容都沒有究西,白茫茫一片。
1.如果把樣式放在底部,對(duì)于IE瀏覽器,在某些場(chǎng)景下(新窗口打開,刷新等)頁面會(huì)出現(xiàn)白屏,而不是內(nèi)容逐步展現(xiàn)物喷。
2.如果使用 @import標(biāo)簽,即使 CSS 放入 link, 并且放在頭部,也可能出現(xiàn)白屏;
3.把js放在頂部也會(huì)出現(xiàn)白屏現(xiàn)象卤材,因?yàn)榧虞d JavaScript 時(shí),會(huì)禁用并發(fā),并且阻止其他內(nèi)容的下載.
<li>FOUC,全稱叫做Flash of Unstyled Content,中文名為無樣式內(nèi)容閃爍,如果把樣式放在底部,對(duì)于IE瀏覽器,在某些場(chǎng)景下(點(diǎn)擊鏈接,輸入U(xiǎn)RL,使用書簽進(jìn)入等),會(huì)出現(xiàn) FOUC 現(xiàn)象(逐步加載無樣式的內(nèi)容(即html的內(nèi)容),等CSS加載后頁面突然展現(xiàn)樣式).對(duì)于 Firefox 會(huì)一直表現(xiàn)出 FOUC .
</br>
<h3>3.async和defer的作用是什么峦失?有什么區(qū)別</h3>
<li>defer:defer是script標(biāo)簽中處理腳本運(yùn)行的屬性之一扇丛,中文稱作延時(shí),作用是js在頁面加載后才會(huì)運(yùn)行腳本尉辑,即加載頁面的同時(shí)加載js帆精,加載完頁面之后才1執(zhí)行js。

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

<li>async:async(HTML5)是script標(biāo)簽中處理腳本運(yùn)行的另一屬性隧魄,中文稱作異步实幕,作用是腳本會(huì)異步加載而不阻塞頁面加載,并且js一旦下載完畢就會(huì)立即執(zhí)行堤器。

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

另外async和defer 屬性僅適用于外部腳本(只有在使用 src 屬性時(shí))。

defer和async.png

<li>區(qū)別:
1.html的4.0版本定義defer末贾,到了html5.0定義anysc闸溃,這就造成瀏覽器的版本不同,對(duì)其的支持力度也就不同。
2.每一個(gè)async屬性的腳本都在它下載結(jié)束之后立刻執(zhí)行辉川,同時(shí)會(huì)在window的load事件之前執(zhí)行表蝙。所以就有可能出現(xiàn)腳本執(zhí)行順序被打亂的情況;每一個(gè)defer屬性的腳本都是在頁面解析完畢之后乓旗,按照原本的順序執(zhí)行府蛇,同時(shí)會(huì)在document的DOMContentLoaded之前執(zhí)行。
</br>
<h3>4.簡(jiǎn)述網(wǎng)頁的渲染機(jī)制</h3>
<b>a:</b>解析 HTML 標(biāo)簽, 構(gòu)建 DOM 樹屿愚。
<b>b:</b>解析 CSS 標(biāo)簽, 構(gòu)建 CSSOM 樹汇跨。
<b>c:</b>把DOM樹和CSSOM樹組合城(render tree)。
<b>d:</b>在渲染樹的基礎(chǔ)上進(jìn)行布局, 計(jì)算每個(gè)節(jié)點(diǎn)的幾何結(jié)構(gòu)妆距。
<b>e:</b>把每個(gè)節(jié)點(diǎn)繪制到屏幕上 (painting)穷遂。

webkit主流程.png

<h3>5.JavaScript 定義了幾種數(shù)據(jù)類型? 哪些是簡(jiǎn)單類型?哪些是復(fù)雜類型?</h3>
JavaScript語言的每一個(gè)值,都屬于某一種數(shù)據(jù)類型娱据。JavaScript的數(shù)據(jù)類型蚪黑,共有六種。
即:
<li>數(shù)值(number):整數(shù)和小數(shù)(比如1和3.14)
<li>字符串(string):字符組成的文本(比如"Hello World")
<li>布爾值(boolean):true(真)和false(假)兩個(gè)特定值
<li>undefined:表示“未定義”或不存在中剩,即此處目前沒有任何值
<li>null:表示空缺忌穿,即此處應(yīng)該有一個(gè)值,但目前為空
<li>對(duì)象(object):各種值組成的集合

其中簡(jiǎn)單類型:
<li>數(shù)值(number)
<li>字符串(string)
<li>布爾值(boolean)
<li>undefined
<li>null

復(fù)雜類型:
<li>對(duì)象(object)

對(duì)象(object)又可以分成三個(gè)子類型结啼。
<li>狹義的對(duì)象(object)
<li>數(shù)組(array)
<li>函數(shù)(function)
</br>
<h3>6.NaN掠剑、undefined、null分別代表什么?</h3>
NaN:表示Not a Number妆棒,不是一種獨(dú)立的數(shù)據(jù)類型澡腾,而是一種特殊數(shù)值,它的數(shù)據(jù)類型依然屬于Number糕珊,只不過數(shù)值計(jì)算時(shí)不符合計(jì)算法則动分。

undefined:表示“缺少值”,就是此處應(yīng)該有一個(gè)值红选,但是還沒有定義澜公;

null:是一個(gè)表示"無"的對(duì)象,轉(zhuǎn)為數(shù)值時(shí)為0喇肋;

</br>
<h3>7.typeof和instanceof的作用和區(qū)別?</h3>
typeof的作用是:用以獲取一個(gè)變量或者表達(dá)式的數(shù)據(jù)類型坟乾。主要用來判斷一個(gè)變量是否存在
返回結(jié)果如下:

typeof 12 === "number"
typeof "interest" === "string"
typeof ture === "boolean"
typeof  undefined === undefined
typeof {a:1} === "object"
typeof [1, 2, 3] === 'object'
typeof function(){} === 'function';

instance of用來判斷一個(gè)變量是否是某個(gè)對(duì)象的實(shí)例。返回結(jié)果:boolean值蝶防,true或false甚侣。

typeof和instance of.png

<h3>8.代碼題</h3>
1.完成如下代碼判斷一個(gè)變量是否是數(shù)字、字符串间学、布爾殷费、函數(shù)


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 ture;
}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()); //1479451763255
console.log(+"4"); //4

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

var a = 1;
a+++a;
//a++=1>a=a+1=2>(a++)+a=3
typeof a+2;
//typeof a>"number">typeof "number"+2>number2

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

var arr = [3,4,5]
// todo..
// 輸出 9, 16, 25 

var arr = [3,4,5];
for (i=0;i<arr.length;i++){
    array=Math.pow(arr[i],2);
    console.log(array);
}//for循環(huán)
var arr = [3,4,5]
    for(i in arr){
        array=Math.pow(arr[i],2);
        console.log(array);
}//for in 循環(huán)
var arr = [3,4,5];
var i = 0 ;
while(i<arr.length){
    array=Math.pow(arr[i],2);
    console.log(array);
    i++;
}//while循環(huán)

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

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

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

console.log(a);
var a = 1;
console.log(a);
console.log(b);
//相當(dāng)于
var a;
console.log(a);//undefined
a=1;
console.log(a);//1
console.log(b)//b is not defined
因?yàn)镴S存在變量提升機(jī)制详羡,所以使得a的聲明提升到最前面仍律,但是此時(shí)a未賦值,因此第一個(gè)console.log(a)輸出結(jié)果為undefined实柠,之后a=1水泉,輪到第二個(gè)console.log(a)輸出結(jié)果為一,而最后的console.log(b)未聲明窒盐,因此控制臺(tái)報(bào)錯(cuò):b is not defined

參考資料:

<a >網(wǎng)站前端性能優(yōu)化之CSS和JS</a>

<a >HTML 5 <script> async 屬性</a>

<a >HTML 5 <script> defer 屬性</a>

<a >阮一峰undefined與null的區(qū)別</a>

<a >js中typeof和instanceof的區(qū)別
</a>

注:版權(quán)歸饑人谷和饑人谷peter所有草则,若有轉(zhuǎn)載,請(qǐng)注明出處

感謝吃瓜子觀眾:


gaki16
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末登钥,一起剝皮案震驚了整個(gè)濱河市畔师,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌牧牢,老刑警劉巖看锉,帶你破解...
    沈念sama閱讀 222,252評(píng)論 6 516
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異塔鳍,居然都是意外死亡伯铣,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,886評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門轮纫,熙熙樓的掌柜王于貴愁眉苦臉地迎上來腔寡,“玉大人,你說我怎么就攤上這事掌唾》徘埃” “怎么了?”我有些...
    開封第一講書人閱讀 168,814評(píng)論 0 361
  • 文/不壞的土叔 我叫張陵糯彬,是天一觀的道長凭语。 經(jīng)常有香客問我,道長撩扒,這世上最難降的妖魔是什么似扔? 我笑而不...
    開封第一講書人閱讀 59,869評(píng)論 1 299
  • 正文 為了忘掉前任,我火速辦了婚禮搓谆,結(jié)果婚禮上炒辉,老公的妹妹穿的比我還像新娘。我一直安慰自己泉手,他們只是感情好黔寇,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,888評(píng)論 6 398
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著斩萌,像睡著了一般缝裤。 火紅的嫁衣襯著肌膚如雪状囱。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,475評(píng)論 1 312
  • 那天倘是,我揣著相機(jī)與錄音,去河邊找鬼袭艺。 笑死搀崭,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的猾编。 我是一名探鬼主播瘤睹,決...
    沈念sama閱讀 41,010評(píng)論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼答倡!你這毒婦竟也來了轰传?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,924評(píng)論 0 277
  • 序言:老撾萬榮一對(duì)情侶失蹤瘪撇,失蹤者是張志新(化名)和其女友劉穎获茬,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體倔既,經(jīng)...
    沈念sama閱讀 46,469評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡恕曲,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,552評(píng)論 3 342
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了渤涌。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片佩谣。...
    茶點(diǎn)故事閱讀 40,680評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖实蓬,靈堂內(nèi)的尸體忽然破棺而出茸俭,到底是詐尸還是另有隱情,我是刑警寧澤安皱,帶...
    沈念sama閱讀 36,362評(píng)論 5 351
  • 正文 年R本政府宣布调鬓,位于F島的核電站,受9級(jí)特大地震影響练俐,放射性物質(zhì)發(fā)生泄漏袖迎。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,037評(píng)論 3 335
  • 文/蒙蒙 一腺晾、第九天 我趴在偏房一處隱蔽的房頂上張望燕锥。 院中可真熱鬧,春花似錦悯蝉、人聲如沸归形。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,519評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽暇榴。三九已至厚棵,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間蔼紧,已是汗流浹背婆硬。 一陣腳步聲響...
    開封第一講書人閱讀 33,621評(píng)論 1 274
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留奸例,地道東北人彬犯。 一個(gè)月前我還...
    沈念sama閱讀 49,099評(píng)論 3 378
  • 正文 我出身青樓,卻偏偏與公主長得像查吊,于是被迫代替她去往敵國和親谐区。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,691評(píng)論 2 361

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

  • JavaScript基本概念逻卖、基礎(chǔ)數(shù)據(jù)類型宋列、運(yùn)算符、流程控制語句评也。 一炼杖、CSS和JS在網(wǎng)頁中的放置順序是怎樣的? ...
    婷樓沐熙閱讀 440評(píng)論 0 2
  • 1.CSS和JS在網(wǎng)頁中的放置順序是怎樣的仇参? CSS一般放在head標(biāo)簽嘹叫,因?yàn)镃SS加載時(shí)可以并發(fā)請(qǐng)求(IE6除外...
    犯迷糊的小羊閱讀 1,047評(píng)論 1 1
  • CSS和JS在網(wǎng)頁中的放置順序是怎樣的? CSS一般放置于網(wǎng)頁開頭诈乒,head標(biāo)簽內(nèi)罩扇。 JS一般放置于網(wǎng)頁最后,bo...
    Nicklzy閱讀 601評(píng)論 0 50
  • 1.CSS和JS在網(wǎng)頁中的放置順序是怎樣的怕磨? 將CSS link標(biāo)簽放在html文檔靠前位置喂饥。JS代碼放在html...
    饑人谷區(qū)子銘閱讀 342評(píng)論 0 1
  • 1.CSS和JS在網(wǎng)頁中的放置順序是怎樣的员帮?為什么會(huì)出現(xiàn)白屏和FOUC? 在寫HTML代碼時(shí)导饲,我們都是將CSS文件...
    26d608950683閱讀 637評(píng)論 0 0