摘要:為數(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 NumberNumber 為數(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 StringString 類(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 Booleanboolean 類(lèi)型,字面量只有?true?和?false,表示真假,即表示計(jì)算機(jī)的 1 和 0。
當(dāng)我們描述只有兩種結(jié)果的事物是可以使用這個(gè)。
4.4 undefined 和 nullundefined 表示一個(gè)聲明了沒(méi)有賦值的變量,所以變量的默認(rèn)值就是undefined。
null 只是表示為空,如果要想把該值設(shè)為 null, 只能手動(dòng)賦值。
5. 數(shù)據(jù)類(lèi)型轉(zhuǎn)換使用?toString()?方法
需要注意:undefined 和 null 類(lèi)型不能使用這個(gè)方法
使用?String()?強(qiáng)轉(zhuǎn),這個(gè)對(duì)任何類(lèi)型都適用
使用?+ 連接符?連接空字符,這是最方便的,也是支持所有類(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)做字符串的拼接了。
這個(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)!
有?+ - * / %?五個(gè),任何一個(gè)數(shù) 除 0 都為為無(wú)窮大,模 0 為 NaN
一元運(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)型
邏輯運(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。
關(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ū)別也是這樣。
賦值運(yùn)算符有?+= -= *= /= %= =?六個(gè)。
+= 就是把左右兩邊的值相加起來(lái)再賦值給左邊的值,其他的也一樣,就不多說(shuō)了。
()
一元運(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)。
使用分支結(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)行完。
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
摘要:所以語(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ù)組 ...
摘要:本文是面向前端小白的,大手子可以跳過(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 分鐘。 字符串作為基本的信息交流的橋梁,幾乎被所有的編程...
摘要:時(shí)間永遠(yuǎn)都過(guò)得那么快,一晃從年注冊(cè),到現(xiàn)在已經(jīng)過(guò)去了年那些被我藏在收藏夾吃灰的文章,已經(jīng)太多了,是時(shí)候把他們整理一下了。那是因?yàn)槭詹貖A太亂,橡皮擦給設(shè)置私密了,不收拾不好看呀。 ...
摘要:入門(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,相信小伙們一定有很多收獲...
摘要:入門(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,相信小伙們一定有很多收獲...
閱讀 3962·2021-11-17 09:33
閱讀 3299·2021-10-08 10:05
閱讀 3126·2021-09-22 15:36
閱讀 1156·2021-09-06 15:02
閱讀 2782·2019-08-29 12:45
閱讀 1607·2019-08-26 13:40
閱讀 3415·2019-08-26 13:37
閱讀 436·2019-08-26 13:37