標籤:
第一章 JavaScript概述1 JS是一門高端的、動態、弱類型的程式設計語言,非常適合物件導向和函數式的編程風格。 第二章 詞法結構1 JS程式是用Unicode字元集編寫的。2 JS是區分大小寫,但是Html並不區分大小寫。3 JS會忽略程式中標識之間的空格,多數情況下,同樣會忽略分行符號。4 斷行符號符(\u000D)和分行符號(\u000A)在一起被解析為一個單行結束符。5 空格、分行符號和格式控制符可以用在JS的注釋、字串直接量和Regex直接量中,但不能用在標識符中。6 Unicode逸出字元可以用在字串直接量、Regex直接量和標識符中(關鍵字除外)。也可以出現在注釋中,但由於JS會將注釋忽略,只是被當成上下文中的ASCII字元處理。7 注釋的兩種格式: a 雙斜杠"//"後文本 b "/*"和"*/"包含文本8 JS標識符必須以字母、底線(_)或貨幣符號($)開始9 可選的分號:如果一條語句以"("、"["、"/"、"+" 或 "-" 開始,那麼它極有可能和前一條語句合在一起解析。在這些符號前加上";",會避免解析混淆。10 如果當前語句和下一條語句無法合并解析,JS則在第一行後填補分號,這是通用規則。但是有兩個例外: a 涉及return、break和continue語句情境中 b 涉及"++"和"--"運算子語句情境中 第三章 類型、值和變數1 資料類型:數字 字串 布爾值 null undefined 和對象(object)2 JS解譯器有自己的記憶體管理機制,可以自動對記憶體進行記憶體回收。3 JS中所有數字均用64位浮點數表示,然而需要注意的是,數組索引和位操作符是基於32位整數的。4 ECMAScript標準不支援八進位直接量,但某些實現可以允許採用八進位形式表示整數。5 JS中算數運算在溢出(overflow)、下溢(underflow)或被零整除時不會報錯。 a 下溢:當運算結果無限接近於零並比能表示的最小值還小的情形6 二進位浮點數和四捨五入錯誤,未來版本或許會支援十進位數群組類型來避免這些舍入問題。 a 0.3 - 0.2 == 0.2 - 0.1 => false7 const now = new Date, now.setDate(now.getDate() - 2); 取得兩天之後的時間戳記。8 字串的長度是其所含16位值的個數。9 在ES5中,字串直接量可以拆分成數行,每行必須以反斜線(\)結束,反斜線和行結束符都不算是字串直接量的內容。10 如果函數沒有傳回值,則返回undefined。11 封裝對象 a var s = "test"; s.len = 4; var t = s.len; t的值是undefined12 任何方法都無法更改一個原始值13 類型轉換圖表
a null == undefined // 兩值被認為相等 b 其他原始值(null沒有轉換為原始值的valueOf和toString方法,所以跟任何原始值比較都是false)比較,一般均會先轉換為數字14 單元運算子(+,-,!) a x + "" // 等價於String(x) b +x // 等價於 Number(x) c !!x // 等價於 Boolean(x)15 Number對象的方法 a toFixed() // 根據小數點後的指定位元將數字轉換成字串 b toExponential() // 使用指數計數法將數字轉換為指數形式的字串 c toPrecision() //根據指定的有效數字位元將數字轉換成字串16 parseInt() a 第一個參數是字串,如果不是,將會調用toString()方法轉為字串 b 第二個參數是radix,合法的取值範圍是2~36, c 不能正確轉換為數字,返回NaN d 如果radix參數是undefined、0或者不存在,radix根據不同情況預設值不同17 對象到原始值的轉換,如果是沒有目的(指明轉為數字或者字串)的轉換,一般會先調用valueOf(一般返回預設對象),然後調用toString。18 對於所有非日期的對象來說,對象到原始值的轉換基本上是對象到數位轉換(首先調用valueOf),日期對象則使用對象到字串的轉換模式。19 函數範圍是指在函數內聲明的所有變數在函數體內始終是可見的。20 當定義一個函數時,它實際上儲存一個範圍鏈。當調用這個函數時,它建立一個新的對象來儲存它的局部變數,並將這個對象添加至儲存的那個範圍鏈上,同時建立一個新的更長的表示函數調用範圍的鏈。閉包的不同就在於,範圍鏈是以對象的形式串聯起來的,跟c語言變數存在棧中,有著本質的區別,函數結束後會釋放。
JS權威指南讀書筆記(一)