摘要:為數(shù)值固定的表示法,用來表示整數(shù)和浮點(diǎn)數(shù)的。無論你寫何種進(jìn)制,它的存儲(chǔ)還是以二進(jìn)制來存儲(chǔ)的,所以這樣就弄成了浮點(diǎn)數(shù)的存儲(chǔ)精確度,浮點(diǎn)數(shù)只能精確到位小數(shù)。關(guān)系運(yùn)算符關(guān)系運(yùn)算符有和。賦值運(yùn)算符賦值運(yùn)算符有六個(gè)。
現(xiàn)在的爬蟲越來越難了,不再和之前的那樣,隨便抓個(gè)包就可以找到相關(guān)的 url ,然后 post 一下或者 get 一下數(shù)據(jù)就出來了。還有一個(gè)可能就是可能你以前用來學(xué)習(xí)的爬蟲網(wǎng)站太簡(jiǎn)單了,還沒有看見過那些猛的。上兩周我就想弄弄知乎登陸,參數(shù)的加密算是把 js 代碼扣出來了,但是只能在瀏覽器上運(yùn)行,一換到 Python 執(zhí)行就各種報(bào)錯(cuò),你不會(huì) JavaScript 就什么都調(diào)不了,所以二話不說,開啟了新的大陸。那就開始吧!
1. JavaScript 介紹JavaScript 是運(yùn)行在 客戶端的語言,和你們說的 Java 是很不一樣的, Java 通常用于服務(wù)器端的。但是他們兩者也有相似之處,比如 JavaScript 的命名規(guī)范和名稱和 Java 相似。其他的好像就沒有什么了,哈哈。
JavaScript 也是一門腳本語言,和 python 一樣,都是解釋性語言,即每運(yùn)行一行代碼就解釋一行,只不過 JavaScript 的解釋器在瀏覽器內(nèi)部。
JavaScript 最初被應(yīng)用是為了處理與表單相關(guān)的驗(yàn)證,現(xiàn)在應(yīng)用就更加廣了,可以說是幾乎無所不能,比如用來做服務(wù)端開發(fā),命令行工具、桌面程序和游戲開發(fā)等。
我在學(xué)了之后也跟著弄了兩個(gè)小的頁面游戲,懷念童年。
2.JavaScript組成EcmaScript:JavaScript 的核心,定義了 JavaScript 的基本語法和數(shù)據(jù)類型,也是我們今天所學(xué)的內(nèi)容。
DOM:document odject model, 文檔對(duì)象模型,用于操作網(wǎng)頁中的頁面元素的,比如可以控制相關(guān)元素的增刪改查。
BOM:browser object model,, 瀏覽器對(duì)象模型, 用于操作瀏覽器窗口,比如彈出框,控制頁面滑動(dòng)等。
3.JavaScript 變量在了解變量之前,先要知道 JavaScript 代碼寫在那里:
行內(nèi),即寫在 html 的元素中,不建議
嵌入,即寫在
注:console.log()這個(gè)方法只是在控制臺(tái)打印一下變量而已。
3.3 變量的命名規(guī)則和規(guī)范1):規(guī)則-必須遵守的,不遵守就會(huì)報(bào)錯(cuò),就好比人類的法律
由字母、數(shù)字、下劃線和 $ 組成,但是不能以數(shù)字開頭,如:12asd 這個(gè)名字就會(huì)報(bào)錯(cuò)
不能是關(guān)鍵字或保留字,比如 var、for等
嚴(yán)格區(qū)分大小寫,就是說大寫和小寫都是不一樣的變量
2):規(guī)范-建議遵守的,但不遵守也不會(huì)報(bào)錯(cuò),比如人類的道德
變量名必須有意義,因?yàn)檫@樣別人才能看得懂,而且也利于維護(hù),沒有意義的就像我們需要破解相關(guān)參數(shù)時(shí)看到的 js 混淆,想想就頭痛。
遵守駝峰命名法,首字母小寫,后面單詞的首字母大寫,如:userName
3.4 小案例了解完變量之后可以做個(gè)小案例:交換兩個(gè)值
4. 數(shù)據(jù)類型JavaScript 的數(shù)據(jù)類型分兩種,一個(gè)為簡(jiǎn)單數(shù)據(jù)類型,另一個(gè)為復(fù)雜數(shù)據(jù)類型。
簡(jiǎn)單數(shù)據(jù)類型有?Number、String、Boolean、undefined 和 null。一共五種
復(fù)雜數(shù)據(jù)類型比如?object,這個(gè)以后遇到再說,慢慢來。
4.1 NumberNumber 為數(shù)值固定的表示法,用來表示整數(shù)和浮點(diǎn)數(shù)的。它的字面量就是數(shù)值,那字面量是什么意思呢?字面量就是這個(gè)變量表示的值,
比如上面變量 a 的字面量就是 12,b 的字面量就是 45。
我們還可以使用?typeof?關(guān)鍵字來判斷這個(gè)數(shù)據(jù)類型
除了使用上面的十進(jìn)制來賦值,我們還可以使用八進(jìn)制和十六進(jìn)制
八進(jìn)制的數(shù)是以?0?開頭的,而十六進(jìn)制的是以?0x?開頭的,其他的進(jìn)制就不討論了。
無論你寫何種進(jìn)制,它的存儲(chǔ)還是以二進(jìn)制來存儲(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ù)類型是有范圍的,但是不需要我們刻意去計(jì),記住它的關(guān)鍵字就可以了。
最后再說一個(gè)關(guān)鍵字:NaN:not a number,這個(gè)表示不是數(shù)值,當(dāng)有兩個(gè)數(shù)據(jù)運(yùn)算時(shí),運(yùn)算失敗就會(huì)返回這個(gè)值。我們也可以判斷一個(gè)數(shù)據(jù)類型是不是 NaN,使用?isNaN()?方法即可。
4.2 StringString 類型就是用單引號(hào)或雙引號(hào)括起來的內(nèi)容就是了,和 python 的字符串類型也是差不多的。
length?屬性是獲取字符串的長(zhǎng)度。
連接兩個(gè)字符串可以使用?+?進(jìn)行連接, + 號(hào)兩邊不需要全是 String 類型也可以進(jìn)行連接
我是一個(gè)"帥哥"
我喜歡"學(xué)‘python’"
這里面有單引號(hào)和雙引號(hào),如果直接進(jìn)行打印的話就會(huì)出錯(cuò),這時(shí)候我們就需要把這些有意義的字符給轉(zhuǎn)義符,轉(zhuǎn)成普通的字符
根據(jù)上面的轉(zhuǎn)義符,就可以寫出下面語句了
4.3 Booleanboolean 類型,字面量只有?true?和?false,表示真假,即表示計(jì)算機(jī)的 1 和 0。
當(dāng)我們描述只有兩種結(jié)果的事物是可以使用這個(gè)。
4.4 undefined 和 nullundefined 表示一個(gè)聲明了沒有賦值的變量,所以變量的默認(rèn)值就是undefined。
null 只是表示為空,如果要想把該值設(shè)為 null, 只能手動(dòng)賦值。
5. 數(shù)據(jù)類型轉(zhuǎn)換使用?toString()?方法
需要注意:undefined 和 null 類型不能使用這個(gè)方法
使用?String()?強(qiáng)轉(zhuǎn),這個(gè)對(duì)任何類型都適用
使用?+ 連接符?連接空字符,這是最方便的,也是支持所有類型
使用?Number()?,當(dāng)轉(zhuǎn)不了的時(shí)候會(huì)返回 NaN,說明不是數(shù)值,在將 Boolean 類型轉(zhuǎn) Number 時(shí),true會(huì)轉(zhuǎn)為 1, false 會(huì)轉(zhuǎn)為 0。這個(gè)方法不支持將數(shù)字開頭帶有其它字符的字符串轉(zhuǎn)為數(shù)值類型,如 "12df"
使用?parseInt()?,只能轉(zhuǎn)為整數(shù),而且轉(zhuǎn)不了Boolean。但是可以轉(zhuǎn)以數(shù)字開頭而帶有字符的字符串。這個(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)作字符串
使用 + 或 - 來將值取正或取負(fù)。這個(gè)的功能和 Number 差不多。
使用 - 來進(jìn)行減法運(yùn)算來轉(zhuǎn)。這個(gè)使用運(yùn)算符就會(huì)先把左右兩邊的類型先轉(zhuǎn)為數(shù)值類型再運(yùn)算,所以可以用來相減 0。至于 + 不行,是因?yàn)檫@個(gè)用來做字符串的拼接了。
這個(gè)使用?Boolean()?來轉(zhuǎn)就可以了,所有類型都可以轉(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)換通常用在判斷語句的情況,隱式轉(zhuǎn)換可以減少代碼的書寫,等說到判斷語句再說,下面就有!
6. 操作符操作符就是用來對(duì)數(shù)據(jù)類型進(jìn)行操作的符號(hào),每個(gè)語言的操作符都差不多,這里再說下可以更深刻一點(diǎn)!
有?+ - * / %?五個(gè),任何一個(gè)數(shù) 除 0 都為為無窮大,模 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 類型
邏輯運(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 類型的,這里就不細(xì)說了,都差不多的,只說下 == 和 === 的區(qū)別,還有 !== 和 != 的區(qū)別。== 只判斷兩值的字面量相等不相等,不會(huì)判斷數(shù)據(jù)類型,而 === 會(huì)先去判斷數(shù)據(jù)類型再判斷字面量,!= 和 !== 的區(qū)別也是這樣。
賦值運(yùn)算符有?+= -= *= /= %= =?六個(gè)。
+= 就是把左右兩邊的值相加起來再賦值給左邊的值,其他的也一樣,就不多說了。
()
一元運(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í)行不同的語句,循環(huán)結(jié)構(gòu)就是重復(fù)執(zhí)行某一段代碼。
順序結(jié)構(gòu)就不多說了,我們剛才運(yùn)行的代碼就是順序結(jié)構(gòu)的,現(xiàn)在先說下分支結(jié)構(gòu)。
使用分支結(jié)構(gòu)可以使用 if 和 else 組成的語句,寫法和 python 差不多。
多帶帶 if 語句
說到判斷,就有個(gè)隱式轉(zhuǎn)換,就是 if 括號(hào)里面的值會(huì)將任意類型的值隱式轉(zhuǎn)換成 Boolean 類型。如下:
另一種形式的分支語句:
if-else 一起用
這個(gè) if-else 合用還有個(gè)簡(jiǎn)單點(diǎn)的寫法,叫做三元運(yùn)算符,語法為
當(dāng)表達(dá)式1 為 true 的時(shí)候,就會(huì)把 表達(dá)式2 的值給返回,否則返回 表達(dá)式3 的值,這個(gè)有一個(gè)缺陷,就是必須要有結(jié)果返回。
還有一種形式的分支語句:
if-else if-if 三個(gè)合用
上面的 三個(gè)合用我們也可以使用?switch?語句來改寫,這個(gè)是選擇關(guān)鍵詞。語法為
改寫后:
因?yàn)?case 的值只能是一個(gè)值,不能是范圍,所以用了個(gè)除法來解決,要不然需要寫大量的 case,還需要注意一點(diǎn)是一定需要記得寫 break,否則在匹配到相應(yīng)的值之后它會(huì)一直往下運(yùn)行不管 case 值是否對(duì)應(yīng),直到遇到 break 或者 全部運(yùn)行完。
JavaScript 的循環(huán)結(jié)構(gòu)也有?while?和?for語句,但他還有?do-while語句。
for語句:一般在確定了循環(huán)的次數(shù)就會(huì)使用這個(gè)比較方便,語法為:
這個(gè)先去執(zhí)行初始化表達(dá)式1, 然后去執(zhí)行判斷表達(dá)式2,符合條件就會(huì)執(zhí)行循環(huán)體,循環(huán)體執(zhí)行完之后就執(zhí)行自增表達(dá)式3,再去判斷,接下來就是重復(fù)剛才的動(dòng)作,直到不滿足判斷表達(dá)式2。
while 語句:在無法確定循環(huán)次數(shù)的時(shí)候就可以用這個(gè),使用這個(gè)需要注意循環(huán)結(jié)束的條件,以免寫了死循環(huán)。語法為:
滿足循環(huán)條件之后就執(zhí)行循環(huán)體,然后再去執(zhí)行循環(huán)條件,接下來就是重復(fù)剛才的動(dòng)作直到不滿足條件。
do-while 語句:這個(gè)也是在不知道循環(huán)次數(shù)的時(shí)候使用,但是當(dāng)循環(huán)體無論如何都需要執(zhí)行一次的話就可以選擇使用這個(gè)。語法為:
先去執(zhí)行循環(huán)體,再去判斷循環(huán)條件,接下來就是重復(fù)剛才的動(dòng)作直到循環(huán)條件不滿足。
在循環(huán)結(jié)構(gòu)中還可以使用 break 和 continue 來對(duì)循環(huán)進(jìn)行跳出的操作。break 就是跳出整個(gè)循環(huán),就是循環(huán)結(jié)束,而 continue 是跳出本次循環(huán),接著下一次的循環(huán)。
學(xué)習(xí)了循環(huán)之后,我們也可以嘗試著自己打印一個(gè)三角形,或者 99 乘法表來滿足一下自己。
這兩個(gè)的思路都是差不多的,只要你搞定了第一個(gè)三角形的思路,下面的乘法表自然就迎刃而解了,這里就不多說了。
下篇就開始進(jìn)入復(fù)雜的數(shù)據(jù)類型了,即 object,準(zhǔn)備好了嗎?
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://www.ezyhdfw.cn/yun/101632.html
摘要:所以語句也會(huì)常常用于終止函數(shù)的運(yùn)行,還有也可以不寫語句,但是會(huì)默認(rèn)返回函數(shù)內(nèi)部的對(duì)象中,函數(shù)的內(nèi)部都有一個(gè)對(duì)象,用來記錄在調(diào)用函數(shù)時(shí)所傳進(jìn)來的參數(shù),可以說是一個(gè)偽數(shù)組。里面使用了關(guān)鍵字,這個(gè)的指向就是使用構(gòu)造函數(shù)創(chuàng)建的對(duì)象,也不需要返回對(duì) 今天好像是情人節(jié)?所以最適合面向?qū)ο?,JavaScript 也有對(duì)象,我們也可以隨時(shí)面向?qū)ο螅奖愕煤?,那怎樣才有?duì)象呢?下面告訴你! 1. 數(shù)組 ...
摘要:本文是面向前端小白的,大手子可以跳過,寫的不好之處多多分鐘搞定常用基礎(chǔ)知識(shí)前端掘金基礎(chǔ)智商劃重點(diǎn)在實(shí)際開發(fā)中,已經(jīng)非常普及了。 JavaScript字符串所有API全解密 - 掘金關(guān)于 我的博客:louis blog SF專欄:路易斯前端深度課 原文鏈接:JavaScript字符串所有API全解密 本文近 6k 字,讀完需 10 分鐘。 字符串作為基本的信息交流的橋梁,幾乎被所有的編程...
摘要:時(shí)間永遠(yuǎn)都過得那么快,一晃從年注冊(cè),到現(xiàn)在已經(jīng)過去了年那些被我藏在收藏夾吃灰的文章,已經(jīng)太多了,是時(shí)候把他們整理一下了。那是因?yàn)槭詹貖A太亂,橡皮擦給設(shè)置私密了,不收拾不好看呀。 ...
摘要:入門,第一個(gè)這是一門很新的語言,年前后正式公布,算起來是比較年輕的編程語言了,更重要的是它是面向程序員的函數(shù)式編程語言,它的代碼運(yùn)行在之上。它通過編輯類工具,帶來了先進(jìn)的編輯體驗(yàn),增強(qiáng)了語言服務(wù)。 showImg(https://segmentfault.com/img/bV1xdq?w=900&h=385); 新的一年不知不覺已經(jīng)到來了,總結(jié)過去的 2017,相信小伙們一定有很多收獲...
摘要:入門,第一個(gè)這是一門很新的語言,年前后正式公布,算起來是比較年輕的編程語言了,更重要的是它是面向程序員的函數(shù)式編程語言,它的代碼運(yùn)行在之上。它通過編輯類工具,帶來了先進(jìn)的編輯體驗(yàn),增強(qiáng)了語言服務(wù)。 showImg(https://segmentfault.com/img/bV1xdq?w=900&h=385); 新的一年不知不覺已經(jīng)到來了,總結(jié)過去的 2017,相信小伙們一定有很多收獲...
閱讀 4147·2021-11-17 09:33
閱讀 3343·2021-10-08 10:05
閱讀 3258·2021-09-22 15:36
閱讀 1226·2021-09-06 15:02
閱讀 2833·2019-08-29 12:45
閱讀 1648·2019-08-26 13:40
閱讀 3495·2019-08-26 13:37
閱讀 489·2019-08-26 13:37