標籤:包括 第一個 第三版 學習 32位 轉型 作用 最好 local
1. ECMAScript中的一切(變數、函數名和操作符)都區分大小寫。
2. 標識符:指變數、函數、屬性的名字,或者函數的參數。
- 第一個字元必須是一個字母、一個底線( _ )或者一個貨幣符號($);
- 其他字元可以使字母、底線、貨幣符號或者數字。
- 按照慣例,ECMAScript標識符採用駝峰大小寫格式。
3. strict 模式:*use strict*,可以在指令碼中啟用strict 模式,寫在代碼頂部。4. ECMAScript中的語句採用一個分號作為結尾。雖然並不必需,但是可以用來避免錯誤(不完整輸入etc),某些情況下可以增加代碼的效能(解析器不需要推測哪裡需要分號)。5. 變數:ECMAScript中的變數是鬆散型的,即可以用來儲存任何類型的資料——每個變數僅僅是一個用於儲存值的預留位置而已。
- var 變數名;
- 省略var操作符可以定義全域變數,但是並不推薦。因為在局部範圍中定義的全域變數難以維護,而且如果有意的忽略了var操作符,也會由於變數不會馬上就有定義(definition)而導致不必要的混亂。給未經聲明的變數賦值在strict 模式下會導致拋出ReferenceError錯誤。
6. 資料類型:ECMAScript中有5種單一資料型別(基礎資料型別 (Elementary Data Type)):Undefined, Null, Boolean, Number, String以及一種複雜資料類型Object。
- typeof操作符用於檢測給定變數的資料類型
- typeof null會返回object,因為特殊值null被認為是一個空的對象引用
7. undefined類型只有一個值,即特殊的undefined。這個值是由ECMA-262第三版引入的,用於區分Null 物件指標和未經初始化的變數。但是,包含undefined值的變數與尚未定義的變數並不一樣。
- var message;表示“定義了一個變數,名為message,但是未初始化”,使用alert(message)會顯示message變數的值,為“undefined”;
- 如果沒有“var message”,則表示所謂的message變數並沒有被定義,即message變數本質上並不存在,使用alert(message);會產生錯誤。
- 但是對於未初始化的變數執行typeof操作符會返回undefined值,對於未聲明(未定義)的變數執行typeof操作符同樣會返回undefined值。
- 所以,即便未初始化的變數會被自動賦予undefined值,但是顯式地初始設定變數仍然值得推薦,因為typeof操作符對這個變數進行操作的時候,我們就可以立即知道被檢測的變數還沒有被聲明,而不是沒有被初始化(例子:應該使用var message = “example”)。
- 注意“初始化”和“被聲明”兩者的區別。
8. null類型也只有一個值,即特殊的null。從邏輯角度來看,null值表示一個Null 物件指標,所以typeof null會返回“object”。
- 如果定義的變數準備在將來用於儲存對象,那麼最好將該變數初始化為null而非其他值,以方便檢查null值就可以知道該變數是否儲存了一個對象的引用(if (car != null))
9. ECMAScript中所有類型的值都有與boolean值等價的值,即var message = “Hello”; var messageAsBoolean = Boolean(message); message字串被轉換成了一個Boolean值,被儲存於messageAsBoolean中。10. 浮點數值的最高精度是17位小數,但是在進行算數計算時其精確度遠遠不如整數,所以不要做if (a + b == 0.3)類似的操作。永遠不要測試某個特定的浮點數值。11. NaN(Not a Number)用來表示一個本來要返回數值的運算元未返回數值的情況。在ECMAScript中,任何數值除以0都會返回NaN,因此不會影響其他代碼的執行。
- 任何涉及NaN的操作都會返回NaN
- NaN和任何值都不相等,包括NaN本身。
- isNaN()函數,可以接受一個參數,該參數可以使任何類型,而該函數可以用來協助確定這個參數是否“不是數值”。
12. 有3個函數可以把非數值轉換為數值:Number()、parseInt()和parseFloat()。第一個用於任何資料類型,後兩者專門用於把字串轉換為數值。13. parseInt()函數在處理字串時,會忽略字串前面的空格,直至找到第一個非空白字元,如果第一個字元不是數字字元或者負號,parseInt()返回NaN;如果第一個字元是數字字元,parseInt()會繼續解析第二個字元,直到解析完所有後續字元或者遇到了一個非數字字元;小數點並非一個有效數字字元。常會給parseInt函數提供第二個參數作為轉換時使用的基數(即多少進位):var num = parseInt(“AF”, 16); 。為了避免解析錯誤,建議無論什麼情況下都明確指定基數,所以始終將10作為第二個參數是必要的,當常用十進位數值時。14. String()函數:
- 如果值有toString()方法,則調用該方法(沒有參數)並返回相應的結果;
- 如果值是null,則返回“null”;
- 如果值是undefined,則返回“undefined”
15. 在ECMAScript中,Object類型是所有它的執行個體的基礎,即Object類型所具有的任何屬性和方法也同樣存在於更具體的對象中。Object的每個執行個體都具有下列屬性和方法:
- Constructor:儲存著用於建立當前對象的函數。
- hasOwnProperty(propertyName):用於檢查給定的屬性在當前對象執行個體中(而非執行個體的原型中)是否存在。其中propertyName必須以字串形式指定(o.hasOwnProperty("name”));
- isPrototypeOf(object):用於檢查傳入的對象是否是另一個對象的原型;
- propertyIsEnumberable(propertyName):用於檢查給定的屬性是否能夠使用for-in語句來枚舉,屬性名稱必須以字串形式指定;
- toLocaleString():返回對象的字串表示,該字串與執行環境的地區對應;
- toString():返回對象的字串表示;
- valueOf():返回對象的字串、數值或者布爾值表示。
16. 一元遞增和遞減操作符規則:
- 在應用於一個包含有效數字字元的字串時,現將其轉換為數值,再執行加減1的操作— 字串變數變成數值變數;
- 在應用於一個不包含有效數字字元的字串時,將變數的值設定為NaN— 字串變數變成數值變數;
- 在應用於布爾值false時,現將其轉換為0再執行加減1的操作— 布爾值變數變成數值變數;
- 在應用於布爾值true時,現將其轉換為1再執行加減1的操作— 布爾值變數變成數值變數;
- 在應用於浮點數值時,執行加減1的操作;
- 在應用於對象時,先調用對象的valueOf()方法以取得一個可供操作的值,然後對該值應用前述規則。如果結果是NaN,則在調用toString()方法後再應用前述規則— 物件變數變成數值變數。
17. 一元加和減操作符:
- 對非數值應用一元加操作符時,該操作符會像Number()轉型函數一樣對這個數值執行轉換;
- 對非數值應用一元減操作符時,遵循一元加操作符規則,最後將得到的數值轉換為負數。
18. 按位非(NOT)
- 按位非操作由一個波浪線(~)表示,執行結果是返回數值的反碼:25(00000000000...1101)則~25(11111111...0010),最終結果與num1 = 25; -num1 - 1的結果相同,但是按位非在數值表示的最底層執行操作,所以速度更快。
19. 按位與(AND)
- 按位與操作符由一個和號字元(&)表示,他有兩個運算元。本質上就是講兩個數值的每一個位對齊,然後做出AND操作(兩個1返回1,否則返回0)
20. 按位或(OR)
21. 按位異或(XOR)
- 由一個插入符號(^)表示,有兩個運算元,如果是同1(兩個1)或者同0(兩個0),返回0,否則返回1
22. 左移
- 由兩個小於符號(<<)表示,這個操作符會將指定數值的所有位向左移動指定位元:var oldValue = 2; var newValue = oldValue << 5 則會將10變為1000000.
- 左移不會影響運算元的符號位,所以-2向左移動5位,會返回-64
23. 有符號的右移
- 有符號的右移動操作符由兩個大於符號(>>)表示,將數值向右移動,但是保留符號位。
24. 無符號右移
- 無符號右移由三個大於符號(>>>)表示,這個操作符會將數值的所有32位都像右移動。對正數來說,與有符號右移相同。但是對於負數而言,由於無符號右移以0來填充空位,而非以符號位的值來填充空位,且無符號右移操作符會把負數的二進位碼當做正數的二進位碼,會導致無符號右移後的結果非常大
25. 邏輯非操作符可以用來將一個值轉換為與之對應的布爾值,而同時用兩個邏輯非操作符,時間上就會類比Boolean()轉型函數的行為,第一個邏輯非操作會基於無論什麼運算元返回一個布爾值,而第二個邏輯非操作則對這個布爾值求反,即可得到這個值真正對應的布爾值。26. 邏輯或的賦值: var myObject = preferredObject || backupObject;
- 表示只有在preferredObject不包含有效值的情況下,給myObject賦予後備值
27. ECMAScript中不含有塊級範圍; Not End Yet...
JavaScript學習筆記—— 3. JavaScript基本概念