如今的爬蟲愈來愈難了,再也不和以前的那樣,隨便抓個包就能夠找到相關的 url ,而後 post 一下或者 get 一下數據就出來了。還有一個可能就是可能你之前用來學習的爬蟲網站太簡單了,尚未看見過那些猛的。上兩週我就想弄弄知乎登錄,參數的加密算是把 js 代碼扣出來了,可是隻能在瀏覽器上運行,一換到 Python 執行就各類報錯,你不會 JavaScript 就什麼都調不了,因此二話不說,開啓了新的大陸。那就開始吧!html
JavaScript 是運行在 客戶端的語言,和大家說的 Java 是很不同的, Java 一般用於服務器端的。可是他們二者也有類似之處,好比 JavaScript 的命名規範和名稱和 Java 類似。其餘的好像就沒有什麼了,哈哈。python
JavaScript 也是一門腳本語言,和 python 同樣,都是解釋性語言,即每運行一行代碼就解釋一行,只不過 JavaScript 的解釋器在瀏覽器內部。瀏覽器
JavaScript 最初被應用是爲了處理與表單相關的驗證,如今應用就更加廣了,能夠說是幾乎無所不能,好比用來作服務端開發,命令行工具、桌面程序和遊戲開發等。服務器
我在學了以後也跟着弄了兩個小的頁面遊戲,懷念童年。工具
在瞭解變量以前,先要知道 JavaScript 代碼寫在那裏:post
還有註釋:學習
變量是計算機內存中存儲數據的標識符,根據變量名稱能夠獲取到內存中存儲的數據。 網站
使用變量咱們能夠更方便的獲取或修改內存中的數據。加密
使用 var 關鍵字來聲明變量,和 python 差很少,都是弱類型的語言,只不過 python 不須要使用關鍵字來聲明。url
注:console.log()這個方法只是在控制檯打印一下變量而已。
1):規則-必須遵照的,不遵照就會報錯,就比如人類的法律
2):規範-建議遵照的,但不遵照也不會報錯,好比人類的道德
瞭解完變量以後能夠作個小案例:交換兩個值
JavaScript 的數據類型分兩種,一個爲簡單數據類型,另外一個爲複雜數據類型。
簡單數據類型有 Number、String、Boolean、undefined 和 null。一共五種
複雜數據類型好比 object,這個之後遇到再說,慢慢來。
Number 爲數值固定的表示法,用來表示整數和浮點數的。它的字面量就是數值,那字面量是什麼意思呢?字面量就是這個變量表示的值,
好比上面變量 a 的字面量就是 12,b 的字面量就是 45。
咱們還可使用 typeof 關鍵字來判斷這個數據類型
除了使用上面的十進制來賦值,咱們還可使用八進制和十六進制
八進制的數是以 0 開頭的,而十六進制的是以 0x 開頭的,其餘的進制就不討論了。
不管你寫何種進制,它的存儲仍是以二進制來存儲的,因此這樣就弄成了浮點數的存儲精確度,浮點數只能精確到17位小數。
能夠看到 兩個浮點數的相加不是很準確,因此不要在有浮點數的運算下作判斷,有可能會有你想不到的結果,如
浮點數除了直接表示咱們還可使用科學計數法,固然,整數也是同樣可使用的。
Number 數據類型是有範圍的,可是不須要咱們刻意去計,記住它的關鍵字就能夠了。
最後再說一個關鍵字:NaN:not a number,這個表示不是數值,當有兩個數據運算時,運算失敗就會返回這個值。咱們也能夠判斷一個數據類型是否是 NaN,使用 isNaN() 方法便可。
String 類型就是用單引號或雙引號括起來的內容就是了,和 python 的字符串類型也是差很少的。
length 屬性是獲取字符串的長度。
鏈接兩個字符串可使用 + 進行鏈接, + 號兩邊不須要全是 String 類型也能夠進行鏈接
這裏面有單引號和雙引號,若是直接進行打印的話就會出錯,這時候咱們就須要把這些有意義的字符給轉義符,轉成普通的字符
根據上面的轉義符,就能夠寫出下面語句了
boolean 類型,字面量只有 true 和 false,表示真假,即表示計算機的 1 和 0。
當咱們描述只有兩種結果的事物是可使用這個。
須要注意:undefined 和 null 類型不能使用這個方法
這個使用 Boolean() 來轉就能夠了,全部類型均可以轉。轉爲 false 的狀況爲 null、undefined、NaN、0 和 空字符串,其餘狀況均爲 true。
其實這個還可使用隱式轉換,就是不須要本身手動轉,解釋器會自動幫咱們轉,隱式轉換一般用在判斷語句的狀況,隱式轉換能夠減小代碼的書寫,等說到判斷語句再說,下面就有!
操做符就是用來對數據類型進行操做的符號,每一個語言的操做符都差很少,這裏再說下能夠更深入一點!
有 + - * / % 五個,任何一個數 除 0 都爲爲無窮大,模 0 爲 NaN
一元運算符就是隻須要一個操做數的運算符,有 ++、-- 和 !
還有 -- 也是同樣的,只是 它是自身減 1,在運算中須要注意變量在一元運算符的順序。
邏輯運算符有 && 、|| 和 !,! 由於只對一個操做數操做因此也屬於一元運算符。
關係運算符有 < > <= >= == != === 和 !==。運算完都是返回 Boolean 類型的,這裏就不細說了,都差很少的,只說下 == 和 === 的區別,還有 !== 和 != 的區別。== 只判斷兩值的字面量相等不相等,不會判斷數據類型,而 === 會先去判斷數據類型再判斷字面量,!= 和 !== 的區別也是這樣。
賦值運算符有 += -= *= /= %= = 六個。
+= 就是把左右兩邊的值相加起來再賦值給左邊的值,其餘的也同樣,就很少說了。
邏輯運算符:同級時先 && 再 ||
JavaScript 的流程結構有三種,分別是順序結構,分支結構和循環結構,這個也和 python 差很少的。
順序結構就是代碼是按順序從上到下執行的,分支結構就是按照給定條件的是否成立而執行不一樣的語句,循環結構就是重複執行某一段代碼。
順序結構就很少說了,咱們剛纔運行的代碼就是順序結構的,如今先說下分支結構。
使用分支結構可使用 if 和 else 組成的語句,寫法和 python 差很少。
單獨 if 語句
說到判斷,就有個隱式轉換,就是 if 括號裏面的值會將任意類型的值隱式轉換成 Boolean 類型。以下:
另外一種形式的分支語句:
if-else 一塊兒用
這個 if-else 合用還有個簡單點的寫法,叫作三元運算符,語法爲
當表達式1 爲 true 的時候,就會把 表達式2 的值給返回,不然返回 表達式3 的值,這個有一個缺陷,就是必需要有結果返回。
還有一種形式的分支語句:
if-else if-if 三個合用
上面的 三個合用咱們也可使用 switch 語句來改寫,這個是選擇關鍵詞。語法爲
改寫後:
由於 case 的值只能是一個值,不能是範圍,因此用了個除法來解決,要否則須要寫大量的 case,還須要注意一點是必定須要記得寫 break,不然在匹配到相應的值以後它會一直往下運行無論 case 值是否對應,直到遇到 break 或者 所有運行完。
JavaScript 的循環結構也有 while 和 for語句,但他還有 do-while語句。
這個先去執行初始化表達式1, 而後去執行判斷表達式2,符合條件就會執行循環體,循環體執行完以後就執行自增表達式3,再去判斷,接下來就是重複剛纔的動做,直到不知足判斷表達式2。
知足循環條件以後就執行循環體,而後再去執行循環條件,接下來就是重複剛纔的動做直到不知足條件。
先去執行循環體,再去判斷循環條件,接下來就是重複剛纔的動做直到循環條件不知足。
在循環結構中還可使用 break 和 continue 來對循環進行跳出的操做。break 就是跳出整個循環,就是循環結束,而 continue 是跳出本次循環,接着下一次的循環。
學習了循環以後,咱們也能夠嘗試着本身打印一個三角形,或者 99 乘法表來知足一下本身。
這兩個的思路都是差很少的,只要你搞定了第一個三角形的思路,下面的乘法表天然就迎刃而解了,這裏就很少說了。
下篇就開始進入複雜的數據類型了,即 object,準備好了嗎?