任務16-JS語法,JS基礎知識1

1.CSS和JS在網(wǎng)頁中的放置順序是怎樣的?為什么會出現(xiàn)白屏和FOUC?

在寫HTML代碼時,我們都是將CSS文件的引入位置放在頭部(<head>標簽內(nèi)部),將js文件的引入位置放在底部(</body>前面)。
出現(xiàn)白屏的原因:
CSS:未將CSS置于首部,瀏覽器加載頁面過程中,首先加載了html內(nèi)容,此時還未加載CSS,需將CSS完全加載完成,頁面才會顯示出來(白屏現(xiàn)象)。
另一種瀏覽器的加載方式是先對頁面內(nèi)容進行展示,然后再加載CSS修改頁面樣式(FOUC: flash of unstyled )。 若是使用@import ,即使把此樣式放在頂部,也可能會出現(xiàn)白屏。

JS: 由于JS的特性,如果把JS放在頁面頂部,在JS未加載完成之時,腳本就會阻塞后面組件的加載,從而出現(xiàn)白屏問題。


2.加載異步:async和defer的作用是什么?有什么區(qū)別

如果在某些場景下,需要將JS不置于頁面底部,此時就要使用 async或defer 來做異步處理。
<script defer src="script.js"></script>
<script async src="script.js"></script>
defer: 加載JS與頁面并行進行,但是要在頁面元素解析完成之后,defer才會被執(zhí)行。
async:加載JS與頁面并行進行,對頁面的渲染也會并行進行。


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

1、Create/Update DOM And request css/image/js:瀏覽器請求到HTML代碼后,在生成DOM的最開始階段(應該是 Bytes → characters 后),并行發(fā)起css、圖片、js的請求,無論他們是否在HEAD里。
2、Create/Update Render CSSOM:CSS文件下載完成,開始構建CSSOM
3、Create/Update Render Tree:所有CSS文件下載完成,CSSOM構建結束后,和 DOM ?一起生成 Render Tree。
4、Layout:有了Render Tree,瀏覽器已經(jīng)能知道網(wǎng)頁中有哪些節(jié)點、各個節(jié)點的CSS定義以及他們的從屬關系。下一步操作稱之為Layout,顧名思義就是計算出每個節(jié)點在屏幕中的位置。
5、Painting:Layout后,瀏覽器已經(jīng)知道了哪些節(jié)點要顯示(which nodes are visible)、每個節(jié)點的CSS屬性是什么(their computed styles)、每個節(jié)點在屏幕中的位置是哪里(geometry)。就進入了最后一步:Painting,按照算出來的規(guī)則,通過顯卡,把內(nèi)容畫到屏幕上。

瀏覽器渲染頁面順序.jpg

4.JavaScript 定義了幾種數(shù)據(jù)類型? 哪些是簡單類型?哪些是復雜類型?NaN、undefined、null分別代表什么?

簡單類型:

<li>數(shù)字 number
<li>字符串 string
<li>布爾 boolean
<li>數(shù)組 (數(shù)組也是對象)
<li>未定義 undefined

復雜類型:

<li>對象 object

NaN:

Number.NaN 是一個特殊值,說明某些算術運算(如求負數(shù)的平方根)的結果不是數(shù)字。
JavaScript 以 NaN 的形式輸出 Number.NaN。NaN 與其他數(shù)值進行比較的結果總是不相等的,包括它自身在內(nèi)。因此,不能與 Number.NaN 比較來檢測一個值是不是數(shù)字,而只能調(diào)用 isNaN() 來比較。

undefined:

表示未賦值,比如說 var = a 占據(jù)了空間,卻未對 a 賦值。

null:

表示一個不存在的元素,空指針。


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

typeof:

作用是查看元素類型。它返回值是一個字符串,該字符串說明運算數(shù)的類型。typeof 一般只能返回如下幾個結果:
返回值:
數(shù)字:number
字符串:string
布爾:boolean
函數(shù):function
undefined: function
其他值全部為 object
例:

通過typeof來獲取一個變量的類型
通過typeof來獲取一個變量素是否存在

instanceof:

判斷一個變量的類型常常會用 typeof 運算符,在使用 typeof 運算符時采用引用類型存儲值會出現(xiàn)一個問題,無論引用的是什么類型的對象,它都返回 “object”。這就需要用到instanceof來檢測某個對象是不是另一個對象的實例。
instanceof用于判斷一個變量是否某個對象的實例,其返回值是布爾類型。
例:
a instanceof b?console.log"true"):conlose.log("false"); //a是b的實例?真:假


代碼題:

1.完成如下代碼判斷一個變量是否是數(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 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.以下代碼的輸出結果是?

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

3.以下代碼的輸出結果是?

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

4.遍歷數(shù)組,把數(shù)組里的打印數(shù)組每一項的平方
```var arr = [3,4,5]```

![](http://upload-images.jianshu.io/upload_images/2399926-c7744b31362292ac.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
5.遍歷 JSON, 打印里面的值 (難度**)

var obj = {
name: 'hunger', sex: 'male', age: 28
}
//todo ...
// 輸出 name: hunger, sex: male, age:28```


6.下面代碼的輸出是? 為什么

console.log(a);//1,js變量提升
var a = 1;// 1
console.log(a); // 1, 通過var a = 1;進行聲明并賦值,調(diào)用a后,得到 1
console.log(b);//b is not defined,未對 b 進行聲明。

<li>關于變量提升:

var v='Hello World'; 
(function(){ 
alert(v); 
})() // 輸出 Hello World

但是:

var v='Hello World'; 
(function(){ 
alert(v);
 var v='I love you';
 })() ```
卻會輸出  undefined
其原因是作用域的問題,變量提升,就是把變量提升提到函數(shù)的top的地方。變量提升 只是提升變量的聲明,并不會把賦值也提升上來。 
其實只是:

var v='Hello World';
(function(){
var v;
alert(v);
v='I love you';
})() ```


本文版權歸本人和饑人谷所有,轉(zhuǎn)載請注明來源。

最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

  • 工廠模式類似于現(xiàn)實生活中的工廠可以產(chǎn)生大量相似的商品,去做同樣的事情,實現(xiàn)同樣的效果;這時候需要使用工廠模式。簡單...
    舟漁行舟閱讀 8,110評論 2 17
  • 問答題 CSS和JS在網(wǎng)頁中的放置順序是怎樣的?答:css:通過link標簽將樣式表放在 中。js:放在 中尾部。...
    饑人谷_桶飯閱讀 314評論 0 0
  • CSS和JS在網(wǎng)頁中的放置順序是怎樣的? CSS一般放置于網(wǎng)頁開頭,head標簽內(nèi)。 JS一般放置于網(wǎng)頁最后,bo...
    Nicklzy閱讀 627評論 0 50
  • SS和JS在網(wǎng)頁中的放置順序是怎樣的?CSS放入<head>標簽中,用link方式引入.因為link在頁面加載的同...
    love2013閱讀 679評論 0 0
  • 陳玲焦點網(wǎng)絡中級四期堅持分享!第903天 今天學了奇妙的外化技術,將情緒用物品來代替,當情緒從人體中分離出來的時...
    煙花閱讀 429評論 0 0

友情鏈接更多精彩內(nèi)容