整合營(yíng)銷服務(wù)商

          電腦端+手機(jī)端+微信端=數(shù)據(jù)同步管理

          免費(fèi)咨詢熱線:

          不會(huì)Html、JavaScript、CSS,怎么辦?

          不會(huì)Html、JavaScript、CSS,怎么辦?有python的Remi庫(kù)

          說(shuō)明:

          =====

          1.1 如果不會(huì)web前端的html、JavaScript、CSS的知識(shí)怎么辦?無(wú)所不能的python可以做到。

          1.2 Remi是一個(gè)用于Python應(yīng)用程序的GUI庫(kù),它將應(yīng)用程序的界面轉(zhuǎn)換為HTML,以便在Web瀏覽器中呈現(xiàn)。

          1.3 這將刪除特定于平臺(tái)的依賴項(xiàng),并允許您使用Python輕松開發(fā)跨平臺(tái)應(yīng)用程序!

          2 準(zhǔn)備:

          =====

          2.1 官網(wǎng)地址:

          https://github.com/dddomodossola/remi
          https://remi.readthedocs.io/en/latest/

          2.2 環(huán)境:

          華為筆記本電腦、深度deepin-linux操作系統(tǒng)、谷歌瀏覽器、python3.8和微軟vscode編輯器。

          2.3 安裝:

          pip install remi
          #本機(jī)安裝
          sudo pip3.8 install remi
          sudo pip3.8 install -i https://mirrors.aliyun.com/pypi/simple remi

          3 Hello world:

          ==========

          3.1 代碼:注釋版

          import remi.gui as gui
          from remi import start, App
          #定義類
          class MyApp(App):
              def __init__(self, *args):
                  super(MyApp, self).__init__(*args)
          #以上3行代碼,固定初始化
              
              def main(self):
                  #實(shí)例化一個(gè)VBox,大小設(shè)置
                  wid=gui.VBox(width=300, height=200)
                  #窗口的標(biāo)簽label=顯示文本,大小比例法設(shè)置
                  # 注意\n代表?yè)Q行,但需要配合style={"white-space":"pre"},才起作用
                  #preserves newline==保留換行符
                  self.lbl=gui.Label('Hello\n World', width='80%', height='50%',style={"white-space":"pre"})
                  #按鈕和名稱、大小設(shè)置,支持中文
                  self.bt=gui.Button('Press me=點(diǎn)擊我!', width=200, height=30)
                  #綁定按鈕的點(diǎn)擊事件,調(diào)用函數(shù)
                  self.bt.onclick.do(self.on_button_pressed)
                  #adding the widgets to the main container
                  #將小部件添加到主容器wid,有時(shí)候上面實(shí)例化用container=主容器
                  wid.append(self.lbl)
                  wid.append(self.bt)
                  return wid
          
              # listener function==監(jiān)聽功能
              #調(diào)用點(diǎn)擊按鈕函數(shù);emitter==發(fā)射器
              def on_button_pressed(self, emitter):
                  self.lbl.set_text('Hello World!')
                  
          if __name__=="__main__":
              # starts the webserver
              # 主要參數(shù)
              # start(MyApp,address='127.0.0.1', port=8081, multiple_instance=False,enable_file_cache=True, update_interval=0.1, start_browser=True)
              #start(MyApp, debug=True, address='0.0.0.0', port=0)  #本機(jī)測(cè)試地址改動(dòng)無(wú)效,為默認(rèn)地址
              start(MyApp, debug=True)  #端口指定無(wú)效,也不是默認(rèn)8081,估計(jì)本機(jī)端口已經(jīng)被占用

          3.2 操作和效果:

          4 Bootstrap:

          =========

          4.1 代碼:bootstrap.py

          import remi.gui as gui
          from remi import start, App
          
          class MyApp(App):
              def __init__(self, *args):
                  super(MyApp, self).__init__(*args)
          
              def main(self):
                  #引入在線Bootstrap的css文件
                  my_css_head="""
                      <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css">
                      """
                  #引入在線Bootstrap的js文件
                  my_js_head="""
                      <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script>
                      """
          
                  self.page.children['head'].add_child('mycss', my_css_head)
                  self.page.children['head'].add_child('myjs', my_js_head)
                 #主窗口實(shí)例化,定義大小和樣式
                  main_container=gui.VBox(width='500px', height='500px', style={'margin':'0px auto','padding':'10px'})
                  #label=標(biāo)簽
                  self.lbl=gui.Label("Label with Lock Icon=帶鎖圖標(biāo)的標(biāo)簽")
                  #樣式選擇
                  self.lbl.add_class("glyphicon glyphicon-lock label label-primary")
                  #輸入框
                  self.tf=gui.TextInput(hint='Your Input')
                  #樣式選擇
                  self.tf.add_class("form-control input-lg")
                  #下拉選擇框
                  self.dd=gui.DropDown(width='200px')
                  #字體大小
                  self.dd.style.update({'font-size':'large'})
                  #樣式選擇
                  self.dd.add_class("form-control dropdown")
                  #下拉框內(nèi)容選擇
                  self.item1=gui.DropDownItem("First Choice")
                  self.item2=gui.DropDownItem("Second Item")
                  #定義self的功能,目前未定義
                  self.dd.append(self.item1,'item1')
                  self.dd.append(self.item2,'item2')
                       
                  #Table=表格,第一個(gè)是表頭
                  myList=[  ('ID','Lastname','Firstname','郵編','城市'),
                              ('1','Pan','Peter','888888','上海'),
                              ('2','Sepp','Schmuck','123456','北京')  ]
                  #表格設(shè)置,內(nèi)容,大小
                  self.tbl=gui.Table.new_from_list(content=myList,width='400px',height='100px',margin='10px')
                  #樣式選擇
                  self.tbl.add_class("table table-striped")
                  #按鈕設(shè)置
                  self.bt1=gui.Button("OK", width="100px")
                  #是Bootstrap樣式 Class:  btn-success
                  self.bt1.add_class("btn-success")                   
                  self.bt2=gui.Button("Abbruch",width="100px")
                  #Bootstrap Class:  btn btn-danger
                  self.bt2.add_class("btn-danger")                
                          
                  #Build up the gui,主窗口掛載下面項(xiàng)目
                  main_container.append(self.lbl,'lbl')
                  main_container.append(self.tf,'tf')
                  main_container.append(self.dd,'dd')
                  main_container.append(self.tbl,'tbl')
                  main_container.append(self.bt1,'btn1')
                  main_container.append(self.bt2,'btn2')
                  
                  return main_container
              
          if __name__=="__main__":
              # starts the webserver
              start(MyApp, debug=True)

          4.2 操作和效果圖:

          5 tabbox:

          =======

          5.1 代碼:

          import remi.gui as gui
          from remi import start, App
          
          class MyApp(App):
              def __init__(self, *args):
                  super(MyApp, self).__init__(*args)
          
              def main(self):
                  #按鈕
                  b1=gui.Button('Show second tab', width=200, height=30)
                  #表格框
                  tb=gui.TabBox(width='80%')
                  tb.append(b1, 'First')
                  
                  b2=gui.Button('Show third tab', width=200, height=30)
                  #tb.add_tab(b2, 'Second', None)
                  tb.add_tab(b2, 'Second')
          
                  b3=gui.Button('Show first tab', width=200, height=30)
                  #tb.add_tab(b3, 'Third', None)
                  tb.add_tab(b3, 'Third')
                  #3種方法
                  b1.onclick.do(self.on_bt1_pressed, tb, b2)
                  b2.onclick.do(self.on_bt2_pressed, tb, 'Third')
                  b3.onclick.do(self.on_bt3_pressed, tb, 0)
          
                  return tb
              
              #按鈕功能的定義,3種功能
              def on_bt1_pressed(self, widget, tabbox, refWidgetTab):
                  tabbox.select_by_widget(refWidgetTab)
          
              def on_bt2_pressed(self, widget, tabbox, refWidgetTabName):
                  tabbox.select_by_name(refWidgetTabName)
              
              def on_bt3_pressed(self, widget, tabbox, tabIndex):
                  tabbox.select_by_index(tabIndex)
          
          if __name__=="__main__":
              #網(wǎng)頁(yè)標(biāo)題,standalone=False默認(rèn)是不允許
              start(MyApp, title="Tab Demo=表格例子", standalone=False)

          5.2 操作和效果圖:

          6standalone:

          ======

          6.1 代碼: mian.py

          from remi import start, App
          #將 bootstrap.py腳本放在本代碼mian.py同一個(gè)目錄下
          from bootstrap import MyApp
          
          if __name__=="__main__":
              start(MyApp, standalone=True)

          6.2 代碼:bootstrap.py=4.1所指定代碼:

          6.3 注意啟動(dòng)網(wǎng)頁(yè)服務(wù)器默認(rèn)為不啟動(dòng)(false),需要啟動(dòng)則為standalone=True。

          6.4 操作和效果圖:

          把web網(wǎng)頁(yè)變成一個(gè)app的GUI

          7 附一張gif:

          代碼省略

          ===自己整理并分享===

          喜歡的人,可以點(diǎn)贊、關(guān)注、評(píng)論、轉(zhuǎn)發(fā)和收藏。

          Python提供的標(biāo)準(zhǔn)庫(kù)中有一個(gè)名為html的標(biāo)準(zhǔn)庫(kù),該標(biāo)準(zhǔn)庫(kù)提供的功能很簡(jiǎn)單,僅僅是把一些組成標(biāo)簽的尖括號(hào)或者是一些特殊字符轉(zhuǎn)換成實(shí)體字符。

          這也是Python本身秉持的設(shè)計(jì)哲學(xué),就是一個(gè)函數(shù)、一個(gè)模塊或者一個(gè)標(biāo)準(zhǔn)庫(kù)只專注于一件事或者是某一方面的事。



          我們先來(lái)大概了解該標(biāo)準(zhǔn)的組成

          
          >>> import html
          >>> dir(html)
          ['__all__', '__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__path__', '__spec__', '_charref', '_html5', '_invalid_charrefs', '_invalid_codepoints', '_re', '_replace_charref', 'entities', 'escape', 'unescape']

          我們不管那些以_開頭的東東,把注意放在escape和unescape這兩個(gè)函數(shù)上。

          假設(shè)我有一些HTML,我擔(dān)心其中會(huì)包含一些可能危險(xiǎn)的<script>標(biāo)記。這時(shí)有一種方法就是把標(biāo)簽的尖括號(hào)轉(zhuǎn)換成實(shí)體符號(hào),從以上兩個(gè)函數(shù)的命名可以大概了解相應(yīng)的功能。

          沒(méi)錯(cuò)escape函數(shù)就是轉(zhuǎn)義的意思,就是把一些字符轉(zhuǎn)換為實(shí)體字符。比如“<”會(huì)轉(zhuǎn)換成“&+lt”、“>”會(huì)轉(zhuǎn)換成“&+gt”等等。(加號(hào)表示連接兩邊的符號(hào))

          >>> import html
          >>> help(html.escape)
          Help on function escape in module html:
          
          escape(s, quote=True)
              Replace special characters "&", "<" and ">" to HTML-safe sequences.
              If the optional flag quote is true (the default), the quotation mark
              characters, both double quote (") and single quote (') characters are also
              translated.
          

          查看該函數(shù)的幫助可以了解到,它會(huì)把特定字符“&”,“<”,“>”等轉(zhuǎn)換成HTML安全的實(shí)體字符。該函數(shù)還有一個(gè)可選的標(biāo)記參數(shù),默認(rèn)為True,意思就是該函數(shù)默認(rèn)為把引用符號(hào)(“”、‘’)等一并轉(zhuǎn)換。

          >>> import html
          >>> demo="<h1>Hello World!,'</h1>"
          >>> html.escape(demo,quote=False)
          "<h1>Hello World!,'mangfu'</h1>"

          上面的例子中,我設(shè)置可選參數(shù)quote為False,則它并不會(huì)對(duì)引號(hào)(‘’)進(jìn)行轉(zhuǎn)換。

          >>> import html
          >>> demo="<h1>Hello World!,'</h1>"
          >>> html.escape(demo)
          '<h1>Hello World!,'mangfu'</h1>'

          上面的例子中,我使用該函數(shù)默認(rèn)的可選參數(shù),從結(jié)果中可以看出函數(shù)輸出已經(jīng)對(duì)引號(hào)(‘’)進(jìn)行轉(zhuǎn)換。

          至于unescape函數(shù),看該函數(shù)的名字就知道它的作用跟escape函數(shù)恰恰相反。

          可能大家對(duì)這些功能還不是很熟悉,但是這在Web開發(fā)方面是很重要的,如果你以后學(xué)習(xí)Django來(lái)搭建自己的網(wǎng)站,會(huì)碰到這個(gè)功能的。

          大家可以動(dòng)手試試unescape函數(shù)。。。

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

          這是小編精心準(zhǔn)備的一份Python爬蟲入門學(xué)習(xí)資料,關(guān)注,轉(zhuǎn)發(fā),私信小編“01”即可免費(fèi)領(lǐng)取!

          1. JavaScript 介紹

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

          JavaScript 也是一門腳本語(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ù)端開發(fā),命令行工具、桌面程序和游戲開發(fā)等。

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




          2.JavaScript組成



          • EcmaScript:JavaScript 的核心,定義了 JavaScript 的基本語(yǔ)法和數(shù)據(jù)類型,也是我們今天所學(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 代碼寫在那里:

          1. 行內(nèi),即寫在 html 的元素中,不建議
          2. 嵌入,即寫在 <script>標(biāo)簽內(nèi),這個(gè)練習(xí)時(shí)可以使用,但當(dāng)代碼量大的時(shí)候也不建議
          3. 外部,即 js 代碼都在另一個(gè)文件內(nèi),用鏈接的方式接入 html 文件即可,推薦使用這種方式。

          還有注釋:

          1. 單行注釋: // 注釋內(nèi)容
          2. 多行注釋: /* 注釋內(nèi)容 */

          3.1 變量的定義以及作用

          變量是計(jì)算機(jī)內(nèi)存中存儲(chǔ)數(shù)據(jù)的標(biāo)識(shí)符,根據(jù)變量名稱可以獲取到內(nèi)存中存儲(chǔ)的數(shù)據(jù)。

          使用變量我們可以更方便的獲取或修改內(nèi)存中的數(shù)據(jù)。

          3.2 定義變量

          使用 var 關(guān)鍵字來(lái)聲明變量,和 python 差不多,都是弱類型的語(yǔ)言,只不過(guò) python 不需要使用關(guān)鍵字來(lái)聲明。



          注: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ū)分大小寫,就是說(shuō)大寫和小寫都是不一樣的變量

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

          • 變量名必須有意義,因?yàn)檫@樣別人才能看得懂,而且也利于維護(hù),沒(méi)有意義的就像我們需要破解相關(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è)以后遇到再說(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ù)類型



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



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

          無(wú)論你寫何種進(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ù)類型是有范圍的,但是不需要我們刻意去計(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ù)類型是不是 NaN,使用 isNaN() 方法即可。



          4.2 String

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



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

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



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

          1. 我是一個(gè)"帥哥"
          2. 我喜歡"學(xué)‘python’"

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



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



          4.3 Boolean

          boolean 類型,字面量只有 truefalse,表示真假,即表示計(jì)算機(jī)的 1 和 0。

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

          4.4 undefined 和 null

          1. undefined 表示一個(gè)聲明了沒(méi)有賦值的變量,所以變量的默認(rèn)值就是undefined。
          2. null 只是表示為空,如果要想把該值設(shè)為 null, 只能手動(dòng)賦值。

          5. 數(shù)據(jù)類型轉(zhuǎn)換

          5.1 其他類型轉(zhuǎn) String 類型

          • 使用 toString() 方法



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

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



          • 使用 + 連接符 連接空字符,這是最方便的,也是支持所有類型



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

          • 使用 Number() ,當(dāng)轉(zhuǎn)不了的時(shí)候會(huì)返回 NaN,說(shuō)明不是數(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)作字符串



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



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



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

          這個(gè)使用 Boolean() 來(lái)轉(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)換通常用在判斷語(yǔ)句的情況,隱式轉(zhuǎn)換可以減少代碼的書寫,等說(shuō)到判斷語(yǔ)句再說(shuō),下面就有!

          6. 操作符

          操作符就是用來(lái)對(duì)數(shù)據(jù)類型進(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 類型



          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 類型的,這里就不細(xì)說(shuō)了,都差不多的,只說(shuō)下==和===的區(qū)別,還有 !==和 !=的區(qū)別。==只判斷兩值的字面量相等不相等,不會(huì)判斷數(shù)據(jù)類型,而===會(huì)先去判斷數(shù)據(jù)類型再判斷字面量,!=和 !==的區(qū)別也是這樣。



          6.5 賦值運(yùn)算符

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

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



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

          1. ()
          2. 一元運(yùn)算符
          3. 算術(shù)運(yùn)算符,同級(jí)時(shí)先 * / 再 + -
          4. 關(guān)系運(yùn)算符:> >=< <=
          5. 相等運(yùn)算符:=====!=!==
          6. 邏輯運(yùn)算符:同級(jí)時(shí)先 && 再 ||
          7. 賦值運(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ǔ)句,寫法和 python 差不多。



          單獨(dú) if 語(yǔ)句

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



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



          if-else 一起用

          這個(gè) if-else 合用還有個(gè)簡(jiǎn)單點(diǎn)的寫法,叫做三元運(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)改寫,這個(gè)是選擇關(guān)鍵詞。語(yǔ)法為



          改寫后:



          因?yàn)?case 的值只能是一個(gè)值,不能是范圍,所以用了個(gè)除法來(lái)解決,要不然需要寫大量的 case,還需要注意一點(diǎn)是一定需要記得寫 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é)束的條件,以免寫了死循環(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ō)了


          主站蜘蛛池模板: 一区二区日韩国产精品| 日本高清不卡一区| 中文字幕一区二区区免| 国产精品久久一区二区三区| 男人免费视频一区二区在线观看 | 国产在线观看91精品一区| 无码一区二区三区视频| 久久无码人妻精品一区二区三区| 精品久久久久久无码中文字幕一区| 亚洲人成人一区二区三区| 美女视频一区二区三区| 国模无码视频一区| 成人精品视频一区二区三区尤物| 亚洲综合无码一区二区痴汉| 精品无码日韩一区二区三区不卡| 国产成人AV一区二区三区无码| 伦理一区二区三区| 亚洲日韩激情无码一区| 久久精品一区二区国产| 亚洲AV综合色区无码一区爱AV| 亚洲人成人一区二区三区| 日本不卡一区二区视频a| 久久人妻av一区二区软件| 亚洲AV成人一区二区三区AV| 无码人妻精品一区二区三| 一区二区三区视频在线| 51视频国产精品一区二区| 亚洲AV无码一区二区三区人| 亚洲精品无码一区二区| 日韩在线视频一区| 午夜无码一区二区三区在线观看| 一区二区三区在线|日本| 国产精品一区二区久久精品无码| 国产一区二区三区高清视频| 国产一区二区三区在线2021 | 亚洲AV无码一区二区乱孑伦AS| 日本在线不卡一区| 国产午夜精品一区二区| 免费萌白酱国产一区二区| 亚洲性日韩精品国产一区二区| 亚洲一区AV无码少妇电影☆|