Follow Me通讀JavaScript紅皮書(第二三章)

總結紅皮書JavaScript高級程序設計的精髓知識點,感謝紅皮書原作者Nicholas C. Zakas

在這裏插入圖片描述
和博主一起走入JavaScript界的聖經,紅皮書,JavaScript高級程序設計第三版。
我們儘量用最短的時間讀完這本書,並且總結出整書的精華知識點。go!

2.1.defer和async屬性

defer:

表示腳本可以延遲到文檔完全被解析和顯示之後再執行,只對外部腳本文件有效。 相當於告訴瀏覽器立即下載,但延遲執行。

async:

表示應該立即下載腳本,但不應妨礙頁面中的其他操作,比如下載其他資源或等待加載其他腳本。只對外部腳本文件有效。
異步腳本並不保證按照指定它們的先後順序執行,一定會在頁面的load事件前執行,但可能會在DOMContentLoaded事件觸發之前或之後執行。

換言之,
只要不存在defer和async屬性,瀏覽器都會按照<script>元素在頁面中出現的先後順序對它們依次進行解析。

2.2.<script>標籤的位置

JavaScript代碼放在<body>的最後,先呈現瀏覽器的內容,因爲瀏覽器在遇到body標籤時纔開始呈現內容。

2.3.CDATA片段

指不應被XML解析器進行解析的文本數據。
在這裏插入圖片描述

2.4.外部js的優勢

  • 可維護性
  • 可緩存(兩個頁面引入一個js只需下載一次)
  • 適應未來

2.5.<noscript>元素

  • 瀏覽器不支持腳本
  • 瀏覽器支持腳本但腳本被禁用
    滿足以上任一條件,瀏覽器會顯示的內容。

原書第二章小結在此

在這裏插入圖片描述
基本和博主總結的一致。下面我們進軍第三章

3.1區分大小寫

ECMAScript中一切區分大小寫,也就是說Baby和baby是代表兩個寶貝。

3.2標識符第一個字符不能是數字

第一個字符:必須是一個字母,下劃線或一個$
其他字符:上面的,數字

3.3駝峯命名規則

myHouse
yourBaby
iLoveYou
第一個字母小寫,遇到一個單詞大寫

3.4註釋

單行 :

 //xxx

多行:

 /*
 *
 *
 */

3.5嚴格模式

"use strict";

可在:

  1. 整個腳本代碼中啓用嚴格模式
  2. 也可以在某個函數體內啓用嚴格模式

3.6沒有分號和大括號也可運行,但是不建議!!!!

可能導致:

程序判斷結束耗費不必要的性能
壓縮代碼多餘空格時報錯等

3.7關鍵字

這就是即使不是數字開頭也不能命名標識符的大佬們
在這裏插入圖片描述
✳爲ECMA5新增

3.8保留字

儘管沒有用途,但是以後可能會有用途,也不讓你隨便用,懂?

在這裏插入圖片描述
第三版定義瞭如上的保留字,但是第五版增加了兩個新的保留字letyield

3.9var-var-var

var應該是JavaScript裏用的最多的一個字符了,他有資格被寫三遍在這裏。

var定義的是局部變量

如果在函數中定義一個var則,這個變量在函數推出後就會被銷燬。
例如:

function(){
var abc="hi";//局部變量
}
test();
alert(message);//錯誤

可以省略var 則,abc則是全局變量,
但是不建議如此操作爲生命的變量,在嚴格模式下會拋出ReferenceError

3.10JavaScript 的五種數據類型

這應該是大家背的最熟的了,反正我能被出來
Undefined,Null,Boolean,Number,String
還有更酷一點的,複雜的Object,本質上是由一組無序的名值對組成的。

3.11typeof操作符

ok只有六種數據類型,能表示出這麼多種JavaScript的數據嗎?
所以應運而生的typeof(我用typeof好好看看不就得了)

  • 如果是函數 -“function”,如果是除了Null的其他結構也是可以直接輸出相應的

如果是其他也能測:

var abc=“some string”;
alert(typeof message);//"string"
alert(typeof 17);//"number"

如果typeof Null

what happen?

會返回object
因爲特殊值null被認爲是一個空的對象的引用

3.12細說幾種數據類型

3.12.1 Undefined

只有一個值,undefined 。
在var 只聲明未賦值時,這個變量的值就是undefined

var abc;
aleret(abc==undefined);//true

3.12.2Null

var car = null; 
alert(typeof car);     // "object" 

null類型也是隻有一個值的數據類型,null
null表示一個空對象指針。
對於將來想要用於保存對象的變量,初始賦值設爲null。

3.12.3Boolean類型

兩個字面值,true false
這兩個值與數字值不是一回事,因此true不一定等於1,二false也不一定等於0。

記得區分大小寫,True 不是Boolean類型

其他數據類型與布爾類型的聯動:

數據類型 轉換爲true的值 轉換爲false的值
boolean true false
String 任何非空字符串 “”(空字符串)
Number 任何非零數字 0和NaN
Object 任何對象 null
Undefined n/a(not applicable縮寫(不適用)) undefined

3.12.4Number類型

整數

可以賦值爲十進制,八進制,十六進制

但是,進行算術運算時,所有八進制,十六進制表示的數值最終都將被轉換成十進制數值。

浮點數

所謂浮點數值,就是該數值中必須包含一個小數點,並且小數點後面必須至少有一位數字。

浮點數值的高精度是 17位小數,但在進行算術計算時其精確度遠遠不如整數。

例如,0.1加 0.2 的結果不是 0.3,而是 0.30000000000000004。這個小小的舍入誤差會導致無法測試特定的浮點數值。

所以不要不要不要這樣測試:

if (a + b == 0.3){          // 不要做這樣的測試!   
  alert("You got 0.3."); } 

NaN

即非數值(Not a Number)是一個特殊的數值,這個數值用於表示一個本來要返回數值的操作數 未返回數值的情況(這樣就不會拋出錯誤了)

NaN 本身有兩個非同尋常的特點。首先,任何涉及 NaN 的操作(例如 NaN/10)都會返回 NaN,這 個特點在多步計算中有可能導致問題。其次,NaN 與任何值都不相等,包括 NaN 本身.

關於isNaN()
在這裏插入圖片描述

數值轉換

有 3個函數可以把非數值轉換爲數值:Number()、parseInt()和 parseFloat()。

var num1 = parseInt("10", 2);     //2  (按二進制解析) 
var num2 = parseInt("10", 8);      //8  (按八進制解析) 
var num3 = parseInt("10", 10);     //10 (按十進制解析) 
var num4 = parseInt("10", 16);     //16 (按十六進制解析)
 var num1 = parseFloat("1234blue");        //1234 (整數) 
 var num2 = parseFloat("0xA");              //0 
 var num3 = parseFloat("22.5");             //22.5 
 var num4 = parseFloat("22.34.5");          //22.34 
 var num5 = parseFloat("0908.5");          //908.5 
 var num6 = parseFloat("3.125e7");          //31250000 

已經凌晨兩點了,讀不動了,明天醒了繼續,爭取儘快搞定這本紅皮書。
晚安。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章