成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專(zhuān)欄INFORMATION COLUMN

爬蟲(chóng)不得不學(xué)之 JavaScript 入門(mén)篇

tracymac7 / 2823人閱讀

摘要:為數(shù)值固定的表示法,用來(lái)表示整數(shù)和浮點(diǎn)數(shù)的。無(wú)論你寫(xiě)何種進(jìn)制,它的存儲(chǔ)還是以二進(jìn)制來(lái)存儲(chǔ)的,所以這樣就弄成了浮點(diǎn)數(shù)的存儲(chǔ)精確度,浮點(diǎn)數(shù)只能精確到位小數(shù)。關(guān)系運(yùn)算符關(guān)系運(yùn)算符有和。賦值運(yùn)算符賦值運(yùn)算符有六個(gè)。

現(xiàn)在的爬蟲(chóng)越來(lái)越難了,不再和之前的那樣,隨便抓個(gè)包就可以找到相關(guān)的 url ,然后 post 一下或者 get 一下數(shù)據(jù)就出來(lái)了。還有一個(gè)可能就是可能你以前用來(lái)學(xué)習(xí)的爬蟲(chóng)網(wǎng)站太簡(jiǎn)單了,還沒(méi)有看見(jiàn)過(guò)那些猛的。上兩周我就想弄弄知乎登陸,參數(shù)的加密算是把 js 代碼扣出來(lái)了,但是只能在瀏覽器上運(yùn)行,一換到 Python 執(zhí)行就各種報(bào)錯(cuò),你不會(huì) JavaScript 就什么都調(diào)不了,所以二話不說(shuō),開(kāi)啟了新的大陸。那就開(kāi)始吧!

1. JavaScript 介紹

JavaScript 是運(yùn)行在 客戶端的語(yǔ)言,和你們說(shuō)的 Java 是很不一樣的, Java 通常用于服務(wù)器端的。但是他們兩者也有相似之處,比如 JavaScript 的命名規(guī)范和名稱(chēng)和 Java 相似。其他的好像就沒(méi)有什么了,哈哈。

JavaScript 也是一門(mén)腳本語(yǔ)言,和 python 一樣,都是解釋性語(yǔ)言,即每運(yùn)行一行代碼就解釋一行,只不過(guò) JavaScript 的解釋器在瀏覽器內(nèi)部。

JavaScript 最初被應(yīng)用是為了處理與表單相關(guān)的驗(yàn)證,現(xiàn)在應(yīng)用就更加廣了,可以說(shuō)是幾乎無(wú)所不能,比如用來(lái)做服務(wù)端開(kāi)發(fā),命令行工具、桌面程序和游戲開(kāi)發(fā)等。

我在學(xué)了之后也跟著弄了兩個(gè)小的頁(yè)面游戲,懷念童年。

2.JavaScript組成

EcmaScript:JavaScript 的核心,定義了 JavaScript 的基本語(yǔ)法和數(shù)據(jù)類(lèi)型,也是我們今天所學(xué)的內(nèi)容。

DOM:document odject model, 文檔對(duì)象模型,用于操作網(wǎng)頁(yè)中的頁(yè)面元素的,比如可以控制相關(guān)元素的增刪改查。

BOM:browser object model,, 瀏覽器對(duì)象模型, 用于操作瀏覽器窗口,比如彈出框,控制頁(yè)面滑動(dòng)等。

3.JavaScript 變量

在了解變量之前,先要知道 JavaScript 代碼寫(xiě)在那里:

行內(nèi),即寫(xiě)在 html 的元素中,不建議

嵌入,即寫(xiě)在

注:console.log()這個(gè)方法只是在控制臺(tái)打印一下變量而已。

3.3 變量的命名規(guī)則和規(guī)范

1):規(guī)則-必須遵守的,不遵守就會(huì)報(bào)錯(cuò),就好比人類(lèi)的法律

由字母、數(shù)字、下劃線和 $ 組成,但是不能以數(shù)字開(kāi)頭,如:12asd 這個(gè)名字就會(huì)報(bào)錯(cuò)

不能是關(guān)鍵字或保留字,比如 var、for等

嚴(yán)格區(qū)分大小寫(xiě),就是說(shuō)大寫(xiě)和小寫(xiě)都是不一樣的變量

2):規(guī)范-建議遵守的,但不遵守也不會(huì)報(bào)錯(cuò),比如人類(lèi)的道德

變量名必須有意義,因?yàn)檫@樣別人才能看得懂,而且也利于維護(hù),沒(méi)有意義的就像我們需要破解相關(guān)參數(shù)時(shí)看到的 js 混淆,想想就頭痛。

遵守駝峰命名法,首字母小寫(xiě),后面單詞的首字母大寫(xiě),如:userName

3.4 小案例

了解完變量之后可以做個(gè)小案例:交換兩個(gè)值

4. 數(shù)據(jù)類(lèi)型

JavaScript 的數(shù)據(jù)類(lèi)型分兩種,一個(gè)為簡(jiǎn)單數(shù)據(jù)類(lèi)型,另一個(gè)為復(fù)雜數(shù)據(jù)類(lèi)型。

簡(jiǎn)單數(shù)據(jù)類(lèi)型有?Number、String、Boolean、undefined 和 null。一共五種

復(fù)雜數(shù)據(jù)類(lèi)型比如?object,這個(gè)以后遇到再說(shuō),慢慢來(lái)。

4.1 Number

Number 為數(shù)值固定的表示法,用來(lái)表示整數(shù)和浮點(diǎn)數(shù)的。它的字面量就是數(shù)值,那字面量是什么意思呢?字面量就是這個(gè)變量表示的值,

比如上面變量 a 的字面量就是 12,b 的字面量就是 45。

我們還可以使用?typeof?關(guān)鍵字來(lái)判斷這個(gè)數(shù)據(jù)類(lèi)型

除了使用上面的十進(jìn)制來(lái)賦值,我們還可以使用八進(jìn)制和十六進(jìn)制

八進(jìn)制的數(shù)是以?0?開(kāi)頭的,而十六進(jìn)制的是以?0x?開(kāi)頭的,其他的進(jìn)制就不討論了。

無(wú)論你寫(xiě)何種進(jìn)制,它的存儲(chǔ)還是以二進(jìn)制來(lái)存儲(chǔ)的,所以這樣就弄成了浮點(diǎn)數(shù)的存儲(chǔ)精確度,浮點(diǎn)數(shù)只能精確到17位小數(shù)。

可以看到 兩個(gè)浮點(diǎn)數(shù)的相加不是很準(zhǔn)確,所以不要在有浮點(diǎn)數(shù)的運(yùn)算下做判斷,有可能會(huì)有你想不到的結(jié)果,如

浮點(diǎn)數(shù)除了直接表示我們還可以使用科學(xué)計(jì)數(shù)法,當(dāng)然,整數(shù)也是一樣可以使用的。

Number 數(shù)據(jù)類(lèi)型是有范圍的,但是不需要我們刻意去計(jì),記住它的關(guān)鍵字就可以了。

最后再說(shuō)一個(gè)關(guān)鍵字:NaN:not a number,這個(gè)表示不是數(shù)值,當(dāng)有兩個(gè)數(shù)據(jù)運(yùn)算時(shí),運(yùn)算失敗就會(huì)返回這個(gè)值。我們也可以判斷一個(gè)數(shù)據(jù)類(lèi)型是不是 NaN,使用?isNaN()?方法即可。

4.2 String

String 類(lèi)型就是用單引號(hào)或雙引號(hào)括起來(lái)的內(nèi)容就是了,和 python 的字符串類(lèi)型也是差不多的。

length?屬性是獲取字符串的長(zhǎng)度。

連接兩個(gè)字符串可以使用?+?進(jìn)行連接, + 號(hào)兩邊不需要全是 String 類(lèi)型也可以進(jìn)行連接

思考:如何打印出下列字符串

我是一個(gè)"帥哥"

我喜歡"學(xué)‘python’"

這里面有單引號(hào)和雙引號(hào),如果直接進(jìn)行打印的話就會(huì)出錯(cuò),這時(shí)候我們就需要把這些有意義的字符給轉(zhuǎn)義符,轉(zhuǎn)成普通的字符

根據(jù)上面的轉(zhuǎn)義符,就可以寫(xiě)出下面語(yǔ)句了

4.3 Boolean

boolean 類(lèi)型,字面量只有?true?和?false,表示真假,即表示計(jì)算機(jī)的 1 和 0。

當(dāng)我們描述只有兩種結(jié)果的事物是可以使用這個(gè)。

4.4 undefined 和 null

undefined 表示一個(gè)聲明了沒(méi)有賦值的變量,所以變量的默認(rèn)值就是undefined。

null 只是表示為空,如果要想把該值設(shè)為 null, 只能手動(dòng)賦值。

5. 數(shù)據(jù)類(lèi)型轉(zhuǎn)換
5.1 其他類(lèi)型轉(zhuǎn) String 類(lèi)型

使用?toString()?方法

需要注意:undefined 和 null 類(lèi)型不能使用這個(gè)方法

使用?String()?強(qiáng)轉(zhuǎn),這個(gè)對(duì)任何類(lèi)型都適用

使用?+ 連接符?連接空字符,這是最方便的,也是支持所有類(lèi)型

5.2 其他類(lèi)型轉(zhuǎn) Number 類(lèi)型

使用?Number()?,當(dāng)轉(zhuǎn)不了的時(shí)候會(huì)返回 NaN,說(shuō)明不是數(shù)值,在將 Boolean 類(lèi)型轉(zhuǎn) Number 時(shí),true會(huì)轉(zhuǎn)為 1, false 會(huì)轉(zhuǎn)為 0。這個(gè)方法不支持將數(shù)字開(kāi)頭帶有其它字符的字符串轉(zhuǎn)為數(shù)值類(lèi)型,如 "12df"

使用?parseInt()?,只能轉(zhuǎn)為整數(shù),而且轉(zhuǎn)不了Boolean。但是可以轉(zhuǎn)以數(shù)字開(kāi)頭而帶有字符的字符串。這個(gè)就可以應(yīng)用在比如需要將 "16px" 轉(zhuǎn)為數(shù)值,就可以使用這個(gè)。轉(zhuǎn)不了時(shí)也會(huì)返回 NaN。

使用?parseFloat()?可以轉(zhuǎn)為浮點(diǎn)數(shù),當(dāng)字符串為整數(shù)時(shí)也可以轉(zhuǎn)為整數(shù)。需要注意的是:當(dāng)字符串中有兩個(gè)小數(shù)點(diǎn)的時(shí)候,只會(huì)轉(zhuǎn)第二個(gè)小數(shù)點(diǎn)之前的數(shù)字,后面的都當(dāng)作字符串

使用 + 或 - 來(lái)將值取正或取負(fù)。這個(gè)的功能和 Number 差不多。

使用 - 來(lái)進(jìn)行減法運(yùn)算來(lái)轉(zhuǎn)。這個(gè)使用運(yùn)算符就會(huì)先把左右兩邊的類(lèi)型先轉(zhuǎn)為數(shù)值類(lèi)型再運(yùn)算,所以可以用來(lái)相減 0。至于 + 不行,是因?yàn)檫@個(gè)用來(lái)做字符串的拼接了。

5.3 其他類(lèi)型轉(zhuǎn) Boolean 類(lèi)型

這個(gè)使用?Boolean()?來(lái)轉(zhuǎn)就可以了,所有類(lèi)型都可以轉(zhuǎn)。轉(zhuǎn)為 false 的情況為 null、undefined、NaN、0 和 空字符串,其他情況均為 true。

其實(shí)這個(gè)還可以使用隱式轉(zhuǎn)換,就是不需要自己手動(dòng)轉(zhuǎn),解釋器會(huì)自動(dòng)幫我們轉(zhuǎn),隱式轉(zhuǎn)換通常用在判斷語(yǔ)句的情況,隱式轉(zhuǎn)換可以減少代碼的書(shū)寫(xiě),等說(shuō)到判斷語(yǔ)句再說(shuō),下面就有!

6. 操作符

操作符就是用來(lái)對(duì)數(shù)據(jù)類(lèi)型進(jìn)行操作的符號(hào),每個(gè)語(yǔ)言的操作符都差不多,這里再說(shuō)下可以更深刻一點(diǎn)!

6.1 算術(shù)運(yùn)算符

有?+ - * / %?五個(gè),任何一個(gè)數(shù) 除 0 都為為無(wú)窮大,模 0 為 NaN

6.2 一元運(yùn)算符

一元運(yùn)算符就是只需要一個(gè)操作數(shù)的運(yùn)算符,有?++、-- 和 !

前置++:如 a++,變量在前,這個(gè)是先將變量的結(jié)果返回再對(duì)自身加 1,

后置++:如 ++a,變量在后,這個(gè)是先將變量進(jìn)行自身加 1,再把結(jié)果返回

還有 -- 也是一樣的,只是 它是自身減 1,在運(yùn)算中需要注意變量在一元運(yùn)算符的順序。

! 就是對(duì)操作數(shù)取反,而且返回的是 Boolean 類(lèi)型

6.3 邏輯運(yùn)算符

邏輯運(yùn)算符有?&& 、|| 和 !,! 因?yàn)橹粚?duì)一個(gè)操作數(shù)操作所以也屬于一元運(yùn)算符。

&&:這個(gè)是與運(yùn)算符,只有當(dāng)兩邊都為 true 的時(shí)候才會(huì)返回 true,其他情況都返回 false。

||:這個(gè)是或運(yùn)算符,只有當(dāng)兩邊都為 false 的時(shí)候才返回 false, 其他情況都返回 true。

6.4 關(guān)系運(yùn)算符

關(guān)系運(yùn)算符有?< > <= >= == != === 和 !==。運(yùn)算完都是返回 Boolean 類(lèi)型的,這里就不細(xì)說(shuō)了,都差不多的,只說(shuō)下 == 和 === 的區(qū)別,還有 !== 和 != 的區(qū)別。== 只判斷兩值的字面量相等不相等,不會(huì)判斷數(shù)據(jù)類(lèi)型,而 === 會(huì)先去判斷數(shù)據(jù)類(lèi)型再判斷字面量,!= 和 !== 的區(qū)別也是這樣。

6.5 賦值運(yùn)算符

賦值運(yùn)算符有?+= -= *= /= %= =?六個(gè)。

+= 就是把左右兩邊的值相加起來(lái)再賦值給左邊的值,其他的也一樣,就不多說(shuō)了。

6.6 運(yùn)算符優(yōu)先級(jí)從高到低(運(yùn)算順序)

()

一元運(yùn)算符

算術(shù)運(yùn)算符,同級(jí)時(shí)先 * / 再 + -

關(guān)系運(yùn)算符:> >= < <=

相等運(yùn)算符:== === != !==

邏輯運(yùn)算符:同級(jí)時(shí)先 && 再 ||

賦值運(yùn)算符

7. 流程結(jié)構(gòu)

JavaScript 的流程結(jié)構(gòu)有三種,分別是順序結(jié)構(gòu),分支結(jié)構(gòu)和循環(huán)結(jié)構(gòu),這個(gè)也和 python 差不多的。

順序結(jié)構(gòu)就是代碼是按順序從上到下執(zhí)行的,分支結(jié)構(gòu)就是按照給定條件的是否成立而執(zhí)行不同的語(yǔ)句,循環(huán)結(jié)構(gòu)就是重復(fù)執(zhí)行某一段代碼。

順序結(jié)構(gòu)就不多說(shuō)了,我們剛才運(yùn)行的代碼就是順序結(jié)構(gòu)的,現(xiàn)在先說(shuō)下分支結(jié)構(gòu)。

7.1 分支結(jié)構(gòu)

使用分支結(jié)構(gòu)可以使用 if 和 else 組成的語(yǔ)句,寫(xiě)法和 python 差不多。

多帶帶 if 語(yǔ)句

說(shuō)到判斷,就有個(gè)隱式轉(zhuǎn)換,就是 if 括號(hào)里面的值會(huì)將任意類(lèi)型的值隱式轉(zhuǎn)換成 Boolean 類(lèi)型。如下:

另一種形式的分支語(yǔ)句:

if-else 一起用

這個(gè) if-else 合用還有個(gè)簡(jiǎn)單點(diǎn)的寫(xiě)法,叫做三元運(yùn)算符,語(yǔ)法為

當(dāng)表達(dá)式1 為 true 的時(shí)候,就會(huì)把 表達(dá)式2 的值給返回,否則返回 表達(dá)式3 的值,這個(gè)有一個(gè)缺陷,就是必須要有結(jié)果返回。

還有一種形式的分支語(yǔ)句:

if-else if-if 三個(gè)合用

上面的 三個(gè)合用我們也可以使用?switch?語(yǔ)句來(lái)改寫(xiě),這個(gè)是選擇關(guān)鍵詞。語(yǔ)法為

改寫(xiě)后:

因?yàn)?case 的值只能是一個(gè)值,不能是范圍,所以用了個(gè)除法來(lái)解決,要不然需要寫(xiě)大量的 case,還需要注意一點(diǎn)是一定需要記得寫(xiě) break,否則在匹配到相應(yīng)的值之后它會(huì)一直往下運(yùn)行不管 case 值是否對(duì)應(yīng),直到遇到 break 或者 全部運(yùn)行完。

7.2 循環(huán)結(jié)構(gòu)

JavaScript 的循環(huán)結(jié)構(gòu)也有?while?和?for語(yǔ)句,但他還有?do-while語(yǔ)句。

for語(yǔ)句:一般在確定了循環(huán)的次數(shù)就會(huì)使用這個(gè)比較方便,語(yǔ)法為:

這個(gè)先去執(zhí)行初始化表達(dá)式1, 然后去執(zhí)行判斷表達(dá)式2,符合條件就會(huì)執(zhí)行循環(huán)體,循環(huán)體執(zhí)行完之后就執(zhí)行自增表達(dá)式3,再去判斷,接下來(lái)就是重復(fù)剛才的動(dòng)作,直到不滿足判斷表達(dá)式2。

while 語(yǔ)句:在無(wú)法確定循環(huán)次數(shù)的時(shí)候就可以用這個(gè),使用這個(gè)需要注意循環(huán)結(jié)束的條件,以免寫(xiě)了死循環(huán)。語(yǔ)法為:

滿足循環(huán)條件之后就執(zhí)行循環(huán)體,然后再去執(zhí)行循環(huán)條件,接下來(lái)就是重復(fù)剛才的動(dòng)作直到不滿足條件。

do-while 語(yǔ)句:這個(gè)也是在不知道循環(huán)次數(shù)的時(shí)候使用,但是當(dāng)循環(huán)體無(wú)論如何都需要執(zhí)行一次的話就可以選擇使用這個(gè)。語(yǔ)法為:

先去執(zhí)行循環(huán)體,再去判斷循環(huán)條件,接下來(lái)就是重復(fù)剛才的動(dòng)作直到循環(huán)條件不滿足。

在循環(huán)結(jié)構(gòu)中還可以使用 break 和 continue 來(lái)對(duì)循環(huán)進(jìn)行跳出的操作。break 就是跳出整個(gè)循環(huán),就是循環(huán)結(jié)束,而 continue 是跳出本次循環(huán),接著下一次的循環(huán)。

學(xué)習(xí)了循環(huán)之后,我們也可以嘗試著自己打印一個(gè)三角形,或者 99 乘法表來(lái)滿足一下自己。

這兩個(gè)的思路都是差不多的,只要你搞定了第一個(gè)三角形的思路,下面的乘法表自然就迎刃而解了,這里就不多說(shuō)了。

下篇就開(kāi)始進(jìn)入復(fù)雜的數(shù)據(jù)類(lèi)型了,即 object,準(zhǔn)備好了嗎?

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/101632.html

相關(guān)文章

  • 爬蟲(chóng)得不學(xué)之 JavaScript 函數(shù)對(duì)象

    摘要:所以語(yǔ)句也會(huì)常常用于終止函數(shù)的運(yùn)行,還有也可以不寫(xiě)語(yǔ)句,但是會(huì)默認(rèn)返回函數(shù)內(nèi)部的對(duì)象中,函數(shù)的內(nèi)部都有一個(gè)對(duì)象,用來(lái)記錄在調(diào)用函數(shù)時(shí)所傳進(jìn)來(lái)的參數(shù),可以說(shuō)是一個(gè)偽數(shù)組。里面使用了關(guān)鍵字,這個(gè)的指向就是使用構(gòu)造函數(shù)創(chuàng)建的對(duì)象,也不需要返回對(duì) 今天好像是情人節(jié)?所以最適合面向?qū)ο螅琂avaScript 也有對(duì)象,我們也可以隨時(shí)面向?qū)ο螅奖愕煤?,那怎樣才有?duì)象呢?下面告訴你! 1. 數(shù)組 ...

    Terry_Tai 評(píng)論0 收藏0
  • 基礎(chǔ)知識(shí) - 收藏集 - 掘金

    摘要:本文是面向前端小白的,大手子可以跳過(guò),寫(xiě)的不好之處多多分鐘搞定常用基礎(chǔ)知識(shí)前端掘金基礎(chǔ)智商劃重點(diǎn)在實(shí)際開(kāi)發(fā)中,已經(jīng)非常普及了。 JavaScript字符串所有API全解密 - 掘金關(guān)于 我的博客:louis blog SF專(zhuān)欄:路易斯前端深度課 原文鏈接:JavaScript字符串所有API全解密 本文近 6k 字,讀完需 10 分鐘。 字符串作為基本的信息交流的橋梁,幾乎被所有的編程...

    wdzgege 評(píng)論0 收藏0
  • 首次公開(kāi),整理12年積累的博客收藏夾,零距離展示《收藏夾吃灰》系列博客

    摘要:時(shí)間永遠(yuǎn)都過(guò)得那么快,一晃從年注冊(cè),到現(xiàn)在已經(jīng)過(guò)去了年那些被我藏在收藏夾吃灰的文章,已經(jīng)太多了,是時(shí)候把他們整理一下了。那是因?yàn)槭詹貖A太亂,橡皮擦給設(shè)置私密了,不收拾不好看呀。 ...

    Harriet666 評(píng)論0 收藏0
  • SegmentFault 技術(shù)周刊 Vol.40 - 2018,來(lái)學(xué)習(xí)一門(mén)新的編程語(yǔ)言吧!

    摘要:入門(mén),第一個(gè)這是一門(mén)很新的語(yǔ)言,年前后正式公布,算起來(lái)是比較年輕的編程語(yǔ)言了,更重要的是它是面向程序員的函數(shù)式編程語(yǔ)言,它的代碼運(yùn)行在之上。它通過(guò)編輯類(lèi)工具,帶來(lái)了先進(jìn)的編輯體驗(yàn),增強(qiáng)了語(yǔ)言服務(wù)。 showImg(https://segmentfault.com/img/bV1xdq?w=900&h=385); 新的一年不知不覺(jué)已經(jīng)到來(lái)了,總結(jié)過(guò)去的 2017,相信小伙們一定有很多收獲...

    caspar 評(píng)論0 收藏0
  • SegmentFault 技術(shù)周刊 Vol.40 - 2018,來(lái)學(xué)習(xí)一門(mén)新的編程語(yǔ)言吧!

    摘要:入門(mén),第一個(gè)這是一門(mén)很新的語(yǔ)言,年前后正式公布,算起來(lái)是比較年輕的編程語(yǔ)言了,更重要的是它是面向程序員的函數(shù)式編程語(yǔ)言,它的代碼運(yùn)行在之上。它通過(guò)編輯類(lèi)工具,帶來(lái)了先進(jìn)的編輯體驗(yàn),增強(qiáng)了語(yǔ)言服務(wù)。 showImg(https://segmentfault.com/img/bV1xdq?w=900&h=385); 新的一年不知不覺(jué)已經(jīng)到來(lái)了,總結(jié)過(guò)去的 2017,相信小伙們一定有很多收獲...

    nihao 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<