儘可能將CSS link標籤放在html文檔靠前位置。JS代碼放在html文檔底部,body結束標籤前javascript
若是將CSS樣式放在html最後面時,根據瀏覽器渲染機制不一樣可能會出現白屏、無樣式內容閃爍FOUC的狀況。白屏是瀏覽器等待DOM和CSSOM全加載完成後再渲染的時間延遲產生(IE有這種狀況),import導入CSS樣式,即使放在首部區域,也會有白屏現象。無樣式閃爍(IE、firefox都有)是瀏覽器邊加載邊執行,逐步加載無樣式的內容,等CSS加載後頁面忽然展示樣式。
JS代碼放在HTML文檔底部的緣由是:腳本加載須要時間,會阻塞後面內容的展示;頁面某些功能依賴js,若是JS放最前面,先加載js,頁面上某些功能區的樣式可能還沒渲染時JS就執行了。
js禁止併發加載,由於有前後關係因此只能順序加載,CSS樣式可併發加載。html
同步就是順序執行,執行完一個再執行下一個,須要等待、協調運行。異步就是彼此獨立,在等待某事件的過程當中繼續作本身的事,不須要等待這一事件完成後再工做。
JS文件異步加載有async和defer兩種方式<script></script>
沒有defer或async js代碼當即加載並執行,後續渲染元素等待。<script async></script>
js加載並執行與渲染後續文檔併發執行(異步)。是無順序的。<script defer></script>
js加載暫不執行,加載過程與渲染後續文檔併發執行(異步),但js執行須要在全部元素解析完成後進行。有順序的。java
解析HTML構建DOM樹,解析CSS構建CSSOM樹,把DOM、CSSOM組合成渲染樹(render tree),在渲染樹基礎上計算幾何結構,繪製到屏幕。瀏覽器
JS中有6種數據類型:null,undefined,number,string,boolean,object。
複雜類型是指object(廣義對象obj,arr,regx等),可由多個簡單類型的值的合成,能夠看做是一個存放各類值的容器。
簡單類型指number,string,boolean
特殊類型指null,undefined併發
NaN not a number,非數字,NaN和任何值都不等,包括NaN本身。NaN = = NaN //false;判斷一個值是不是NaN,使用isNaN()
null是一個表示"無"的對象,類型轉換是轉爲數值0。空指針,不存在任何東西。只有一個值:null.表示此處有值但爲空。
undefined是一個表示"無"的原始值,類型轉換時轉爲NaN。變量被聲明但沒初始化,有指針但沒指向任何空間。只有一個值:undefined,表示未定義。
null是對象類型(歷史緣由定義爲對象類型,本質上屬於undefined),NaN 是數值類型。異步
typeof做用是檢測變量的數據類型。數值、字符串、布爾值分別返回number、string、boolean,函數返回function,undefined返回undefined,null返回object(兼容之前的代碼,歷史問題定義爲對象類型),NaN返回number,除此以外的其餘狀況全都返回object。
typeof能夠用來檢測一個沒有聲明的變量,而不報錯,非嚴格模式中,可對undefined賦值async
instanceof運算符返回一個布爾值,表示指定對象是否爲某個構造函數的實例函數
type of代碼示例:spa
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是先自增再引用afirefox
var a = 1; a+++a; //結果爲3即(a++)+a typeof a+2; //結果爲 "number2" typeof a的結果是"number" "number"+2 即爲"number2"
typeof運算優先級最高,逗號運算符優先級最低