《Javascript權威指南》就是前端工程師口中常說的犀牛書,得名是由於中文翻譯出版的書籍封面是一隻犀牛,是學習JavaScript的必讀書籍。
JavaScript概述
JavaScript與Java無關,是面向Web的編程語言。前端
前端開發工程師必備的三樣技能:描述網頁內容的HTML;描述網頁樣式的CSS和描述網頁行爲的JavaScript。web
JavaScript是高端的、動態的、弱類型的編程語言,很是符合面向對象和函數式編程的思想。正則表達式
EMCAScript是JavaScript的標準。編程
JavaScript語言核心針對文本、數組、日期和正則表達式定義了許多API,但自己並不提供輸入輸出功能,輸入輸出功能由JavaScript的宿主環境(一般指的是web瀏覽器)提供。數組
詞法結構
字符集
- 使用Unicode字符集,該字符集是ASCII和Latin-1的超集。
- 區分大小寫。
- 一般忽略換行符、製表符和連續空格。
- 轉義序列以u開頭,使用4個十六進制字符表示
- 容許多種方式對同一個字符編碼,並定義了標準化的解碼方式。
註釋
- 在行尾「//」以後的文本都會被JavaScript認爲是註釋並被解釋器忽略。
- 還可使用「/」和「/」來包含一段多行註釋,能夠跨行書寫,但不能夠嵌套。
直接量
- 就是在程序中直接使用的數據值。例如:整數和小數,字符串,布爾值,null,正則表達式,對象,數組。
標識符和保留字
- 用來對變量和函數命名的名字和標記
- 必須以字符、下劃線(_)、美圓符號($)開頭,後續可使用字符、數字、下劃線、美圓符號。注意數字不容許做爲開頭出現,以便解釋器能夠區分標識符和數字。
- 支持全部的Unicode字符集,可是爲了移植性考慮,建議只是用Unicode字符和數字。
- 被拿來作本身的關鍵字的標識符被稱爲保留字。
- 具體實現可能定義獨有的全局變量和函數,每種JavaScript運行環境都有全局屬性列表。
可選的分號
- 使用分號分隔語句。
- 當每條語句獨佔一行時,能夠省略分號。
- 解釋器在缺乏分號就沒法運行的狀況下會自動添加分號(注意不必定是每一個換行符處)。
- return break continue以後的表達式不能使用換行,雖然多數狀況下不會報錯,但會產生邏輯錯誤。
類型、值和變量
- 表示並操做的值的類型稱做數據類型。
- 變量是值的符號名稱,能夠經過名稱來得到對值的引用。
- JavaScript的數據類型分爲兩類:原始類型和對象類型。
- 原始類型包括數字、字符串和布爾值。除此以外還有兩個特殊的原始值:null和undefined。
- 對象是屬性的集合,每一個屬性都由「名/值對」(值能夠是原始值,也能夠是對象)構成。
- 普通的JavaScript對象是「命名值」的無序集合,數組是有序集合。
- 函數也是一種特殊的對象。
- 初始化(使用new運算符)一個新建的對象,咱們稱爲構造函數。
- 每一個構造函數定義了一類(class)對象,表示由構造函數初始化對象的集合。
- JavaScript語言核心定義了Array,Function,Date,RegExp和Error特殊的對象。
- 解釋器有本身的內存管理機制,可自動進行內存的垃圾回收,當再也不有任何應用指向一個對象,該對象所佔內存資源被回收。
- JavaScript自由進行數據類型轉換。
- 變量是無類型的,能夠被賦予任何類型的值,使用var聲明變量。
數字
- 不區分整數值和浮點數值,全部數字均用浮點數值表示。
- 採用IEEE754標準定義的64位浮點格式表示數字,實際操做時則是基於32位整數。
- 數字直接量前添加(-)號能夠獲得負值,(-)是一元求反運算符。
整型
- 用一個數字序列表示十進制整數。
- 以「0x」和「0X」位前綴的是十六進制直接量,其後用0-9和A-F表示。
- ECMAScript標準不支持八進制表示,可是某些實現容許採用八進制表示整數。以數字0爲前綴,0-7的序列表示八進制數。
- 嚴格模式下,明確禁止八進制數。
浮點型直接量
- 能夠含有小數點,採用傳統的實數寫法,由整數部分,小數點和小數部分組成。
- 還可採用指數計數法表示,實數後面跟字母e或者E,再加指數。
算術運算
- 算數運算符是用來進行數字運算的。包括加法運算符(+),減法運算符(-),乘法運算符(*),除法運算符(/)和求餘運算符(%)。
- 除基本運算符外,還支持更加複雜的算術運算,經過做爲Math對象的屬性定義的函數和常亮實現。
算術運算溢出、下溢或被零整除時不會報錯,結果爲特殊值。瀏覽器
- 溢出時表示Infinity(正無窮)或-Infinity(負無窮)。基於它們的算術運算結果仍是Infinity(保留正負號)。
- 下溢表示爲「負零」。返回0,不多用到。
- 被零整除時用無窮表示,零除以零則用NaN表示,除此以外,無窮除以無窮,給負數開方都會獲得NaN。
- NaN不等於自身,判斷NaN爲isNaN()方法,判斷無窮使用isFinite()方法。
二進制浮點數和四捨五入錯誤
- IEEE-754浮點數表示法是一種二進制表示法。
- 能夠精確表示1/二、1/8和1/1024這種,可是沒法精確表示1/十、1/100等。沒法精確表示0.1,因此0.3-0.2==0.2-0.1返回一個false。
日期和時間
- Date()構造函數用來建立表示日期和時間的date對象,包含getFullYear()、getMonth()、getDate()、getDay()、getHours()、getUTCHours()方法。
文本
- 字符串是16位不可變的有序序列。
- 採用UTF-16編碼的Unicode字符集。
字符串直接量
轉義字符
- 以後加一個字符就不在表示他們的字面含義,例如n表示一個換行符。
字符串的使用
- +表示字符串鏈接,將第二個字符串拼到第一個字符串的後面。
- length屬性表示字符串的長度。
- 字符串固定不變,變化是由於返回了新的字符串。
模式匹配
- RegExp()函數是一個構造函數,建立正則表達式。
布爾值
- 表示兩種狀態,使用保留字true和false。
- 包含toString()方法,能夠轉換成‘true’和‘false’