總結紅皮書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";
可在:
- 整個腳本代碼中啓用嚴格模式
- 也可以在某個函數體內啓用嚴格模式
3.6沒有分號和大括號也可運行,但是不建議!!!!
可能導致:
程序判斷結束耗費不必要的性能
壓縮代碼多餘空格時報錯等
3.7關鍵字
這就是即使不是數字開頭也不能命名標識符的大佬們
✳爲ECMA5新增
3.8保留字
儘管沒有用途,但是以後可能會有用途,也不讓你隨便用,懂?
第三版定義瞭如上的保留字,但是第五版增加了兩個新的保留字let
, yield
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
已經凌晨兩點了,讀不動了,明天醒了繼續,爭取儘快搞定這本紅皮書。
晚安。