CSS和JS在網頁中的安排遞次
只管將CSS link標籤放在html文檔靠前位置。JS代碼放在html文檔底部,body完畢標籤前
白屏和FOUC
假如將CSS款式放在html最背面時,依據瀏覽器襯着機制差別能夠會湧現白屏、無款式內容閃灼FOUC的狀況。白屏是瀏覽器守候DOM和CSSOM全加載完成后再襯着的時候延遲發生(IE有這類狀況),import導入CSS款式,即使放在首部地區,也會有白屏徵象。無款式閃灼(IE、firefox都有)是瀏覽器邊加載邊實行,逐漸加載無款式的內容,等CSS加載后頁面倏忽展示款式。
JS代碼放在HTML文檔底部的緣由是:劇本加載須要時候,會壅塞背面內容的展示;頁面某些功用依靠js,假如JS放最前面,先加載js,頁面上某些功用區的款式能夠還沒襯着時JS就實行了。
js制止併發加載,由於有前後關聯所以只能遞次加載,CSS款式可併發加載。
async和defer的作用
同步就是遞次實行,實行完一個再實行下一個,須要守候、諧和運轉。異步就是相互自力,在守候某事宜的歷程當中繼承做本身的事,不須要守候這一事宜完成后再事情。
JS文件異步加載有async和defer兩種體式格局<script></script>
沒有defer或async js代碼馬上加載並實行,後續襯着元素守候。<script async></script>
js加載並實行與襯着後續文檔併發實行(異步)。是無遞次的。<script defer></script>
js加載暫不實行,加載歷程與襯着後續文檔併發實行(異步),但js實行須要在所有元素剖析完成后舉行。有遞次的。
網頁的襯着機制
剖析HTML構建DOM樹,剖析CSS構建CSSOM樹,把DOM、CSSOM組合成襯着樹(render tree),在襯着樹基礎上盤算多少組織,繪製到屏幕。
JavaScript 數據範例
JS中有6種數據範例:null,undefined,number,string,boolean,object。
龐雜範例是指object(廣義對象obj,arr,regx等),可由多個簡樸範例的值的合成,能夠看做是一個寄存種種值的容器。
簡樸範例指number,string,boolean
特別範例指null,undefined
NaN、undefined、null的區分
NaN not a number,非数字,NaN和任何值都不等,包含NaN本身。NaN = = NaN //false;推斷一個值是不是是NaN,運用isNaN()
null是一個示意”無”的對象,範例轉換是轉為數值0。空指針,不存在任何東西。只要一個值:null.示意此處有值但為空。
undefined是一個示意”無”的原始值,範例轉換時轉為NaN。變量被聲明但沒初始化,有指針但沒指向任何空間。只要一個值:undefined,示意未定義。
null是對象範例(汗青緣由定義為對象範例,本質上屬於undefined),NaN 是數值範例。
typeof和instanceof的作用
typeof作用是檢測變量的數據範例。數值、字符串、布爾值離別返回number、string、boolean,函數返回function,undefined返回undefined,null返回object(兼容之前的代碼,汗青問題定義為對象範例),NaN返回number,除此之外的其他狀況全都返回object。
typeof能夠用來檢測一個沒有聲明的變量,而不報錯,非嚴厲形式中,可對undefined賦值
instanceof運算符返回一個布爾值,示意指定對象是不是為某個組織函數的實例
type of代碼示例:
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;
}
}
undefined
var a = 2,
b = "jirengu",
c = false;
alert( isNumber(a) );
alert( isString(a) );
alert( isString(b) );
alert( isBoolean(c) );
alert( isFunction(a));
alert( isFunction( isNumber ) );
+運算符
console.log(1+1); //2 數值直接相加
console.log("2"+"4"); //"24" +會將兩個字符串拼接
console.log(2+"4"); //"24" 一個數值一個字符串也會被拼接
console.log(+new Date()); //1473494481714,日期對象是慣例,有2個操作數時優先挪用toString()要領,一個+號返回毫秒數
console.log(+"4"); //4 一個字符串時會轉換成數值
a++,++a
a++是先援用a在自增,++a是先自增再援用a
var a = 1;
a+++a; //效果為3即(a++)+a
typeof a+2; //效果為 "number2" typeof a的效果是"number" "number"+2 即為"number2"
typeof運算優先級最高,逗號運算符優先級最低