語法
數字
- JavaScript 只有一個數字類型。它在內部被表示爲
64
位的浮點數,沒有分離出整數類型,所以1
和1.0
的值相同,這避免了短整型的溢出問題。 NaN
是一個數值,它表示一個不能產生正常結果的運算結果。NaN
不等於任何值,包括它自己。我們可以用isNaN(xxx)
檢測是否是NaN
。Infinity
表示所有大於1.7976931348623157e+308
的值,可以通過Number.MAX_VALUE
獲取,沒有太大的用處,知道就好,使用時儘量避免。
測試發現,稍微比這個數大一點點,瀏覽器會幫我們改成這個最大值,如果大的比較多就會顯示成Infinity
。
字符串
- JavaScript 中所有的字符都是
16
位的。 'c'+'a'+'t' === 'cat' // true
- 字符串有屬性
length
,可以獲取字符串的長度。 - 字符串有方法
toUpperCase()
可以將字符串轉換成大寫,toLowerCase()
可以將字符串轉換成小寫。
語句
- JS 中,只有六種情況的值是
falsely
其他都是truly
,分別是false null undefined '' 0 -0 NaN
。 for in
語句可以枚舉一個對象的所有屬性名,包括原型上的屬性,屬性名出線的順序是不確定的,我們可以通過hasOwnProperty(variable)
來確定這個屬性名是該對象的成員,還可以使用typeof
來排除函數。- 三元運算符,如果第一個運算數值爲真,則產生第二個運算數的值,如果第一個運算數值爲假,則產生第三個運算數的值。
- // TODO 運算符優先級
typeof
運算符產生的值有number string boolean undefined function object
,數組或null
的結果是object
,這是個BUG。
對象
- 除了基本數據類型,其他都是對象。
String Number Boolean Underfined Null
- 屬性名可以是包括空字符串在內的任意字符串,屬性值可以是除了
undefined
之外的任何值。 - 對象適用於彙集和管理數據。
- JS 包含一種原型鏈的特性,允許對象集成另一個對象的屬性,正確的使用它能減少對象初始化時消耗的時間和內存。
||
運算符用來填充默認值,&&
運算符用來避免錯誤。
let middle = stooge["middle-name"] || "unknow"
flight.equipment && flight.equipment.model
- 對象通過引用來傳遞,它們永遠不會被複制。
delete
運算符用來刪除對象的屬性,有就刪除,不會涉及到原型上。- 減少全局變量污染。最小化的使用全局變量的方式之一是爲你的應用只創建一個唯一的全局變量:
var MYAPP = {}
MYAPP.stooge = {}
MYAPP.flight = {}
...
函數
- 所謂編程,就是將一組需求分解成一組函數與數據結構。我們常說的 程序 = 數據結構 + 算法
- JavaScript 中的函數就是對象。
- 每個函數對象在創建時也隨配有一個 prototype 屬性。它的值是一個擁有 constructor 屬性且值爲該函數的對象。
調用
- 調用一個函數會暫停當前函數的執行,傳遞控制權和參數給新函數。除了聲明時定義的形式參數,每個函數還接收兩個附加的參數: this 和 arguments 。參數 this 在面向對象編程中非常重要,它的值取決於調用的模式。
- 在 JavaScript 中有四種調用模式:方法調用、函數調用、構造器調用、apply 調用。
- 方法調用模式:函數作爲對象的一個屬性時,我們稱之爲一個方法。方法被調用的時候,this 被綁定到該對象, 可以使用 this 訪問自己所屬的對象,能讀取對象的屬性。
- 函數調用模式:當一個函數並非一個對象的屬性時,那麼它就是被當做一個函數來調用的。此時,this 被綁定到全局對象上。通過命名一個變量 that 來保留 this 的訪問權限。
- 構造器調用函數:如果一個函數前面帶上 new 來調用,那麼背地裏將會創建一個連接到該函數的 prototype 成員的新對象,同時 this 會被綁定到那個新對象上。一個函數創建的目的就是希望結合 new 來使用,那這個函數稱爲構造器函數,函數名應該大寫。
- Apply 調用函數,就是綁定 this 的值,參數通過數組的形式傳遞。
閉包
- 作用域的好處是內部函數可以訪問定義他們的外部函數的參數和變量(除了 this 和 arguments)
- 函數可以訪問它被創建時所處的上下文環境,這個稱爲閉包。
- 閉包會保留包含函數作用域,過渡使用會造成內存問題。
正則表達式
可以處理正則表達式的方法有:regexp.exec, regexp.test, string.match, string.replace, string.search, string.split
方法
Array
- array.concat(item…) 該方法添加數據項,形成一個新數組,包含一份array 的淺複製。
- array.join(separator) join 方法構造成一個字符串,默認用,連接,可以用空字符串連接,還會去掉undefined 的項,如果有大量的字符串片段需要拼接,用join 比用 + 元素運算符要快。
- array.pop array.push 兩個方法對數組項進行 stack 操作,會改變原數組。
- array.reverse() 方法反轉 array 裏的元素的順序,會改變原數組。
- array.shift array.unshift 兩個方法對數組項進行隊列的操作,要比 pop 慢,會改變原數組。
- array.slice(start, end) 淺複製,不會修改原數組。
- array.splice(start, deleteCount, item) 從哪裏開始刪除幾項,用 item 替換,會修改原數組。
- array.sort(fn) 接收一個函數,默認數據項都是字符串,進行升序排序。
Number
- number.toExponential(N) 把 number 轉換成指數形式的字符串,N 制定的是小數點後的位數
- number.tofixed(N) 把 number 轉換成一個十進制數形式的字符串,N 制定的是小數點後的位數
- number.toPrecision(N) 把 number 轉換成一個十進制數形式的字符串,可選參數控制數字的精度
- number.toString(radix) 把 number 轉換成一個字符串,可選參數 radix 控制基數。
String
- string.charAt(pos) 返回 string 中 pos 位置處的字符,如果 pos 小於0或者大於等於字符串的長度string.length則會返回字符串。
- string.charCodeAt(pos) 返回的不是字符串,返回的是 pos 處字符的字符碼位。
- string.concat(string…) 把其他字符串連接在一起構造一個新的字符串,直接用 + 實現。
- string.indexOf(searchString, pos) 從 pos 位置開始查找 searchString 返回第一次出現的位置,沒有找到返回 -1,類似的還有string.search()
- string.lastIndexOf(searchString, pos) 從後往前找
- string.match(reg) 如果是全局搜索,則返回匹配的數組
- string.replace(searchValue, replaceValue) 查找和替換,返回新的字符串
- string.slice(start, end) 複製string的一部分,start開始,end-1結束,構造一個新的字符串。
- string.split(sep, limit) 用來分割成片段,創建一個字符串數組,sep 是分割的字符串或者正則, limit 可選參數。
- string.toLowerCase() 轉化成小寫
- string.toUpperCase() 轉化成大寫
END.