Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537 Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537 99re在线播放视频,在线观看午夜视频,99在线精品视频

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

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

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

          一個(gè)適合前端新手輕松上手的JavaScript教學(xué)

          avaScript 是一門編程語(yǔ)言,可為網(wǎng)站添加交互功能(例如:游戲、動(dòng)態(tài)樣式、動(dòng)畫以及在按下按鈕或收到表單數(shù)據(jù)時(shí)做出的響應(yīng)等)。本文介紹了 JavaScript 的精彩之處和主要用途。



          JavaScript 到底是什么?

          JavaScript(縮寫:JS)是一門完備的 動(dòng)態(tài)編程語(yǔ)言)。當(dāng)應(yīng)用于HTML文檔時(shí),可為網(wǎng)站提供動(dòng)態(tài)交互特性。由布蘭登·艾克( Brendan Eich,Mozilla 項(xiàng)目、Mozilla 基金會(huì)和 Mozilla 公司的聯(lián)合創(chuàng)始人)發(fā)明。

          JavaScript 的應(yīng)用場(chǎng)合極其廣泛,簡(jiǎn)單到幻燈片、照片庫(kù)、浮動(dòng)布局和響應(yīng)按鈕點(diǎn)擊,復(fù)雜到游戲、2D/3D 動(dòng)畫、大型數(shù)據(jù)庫(kù)驅(qū)動(dòng)程序等等。

          JavaScript 相當(dāng)簡(jiǎn)潔,卻非常靈活。開發(fā)者們基于 JavaScript 核心編寫了大量實(shí)用工具,可以使 開發(fā)工作事半功倍。其中包括:

          1、瀏覽器應(yīng)用程序接口(API)—— 瀏覽器內(nèi)置的 API 提供了豐富的功能,比如:動(dòng)態(tài)創(chuàng)建 HTML 和設(shè)置 CSS 樣式、從用戶的攝像頭采集處理視頻流、生成3D 圖像與音頻樣本等等。

          2、第三方 API —— 讓開發(fā)者可以在自己的站點(diǎn)中整合其它內(nèi)容提供者(Twitter、Facebook 等)提供的功能。

          3、第三方框架和庫(kù) —— 用來快速構(gòu)建網(wǎng)站和應(yīng)用。

          本節(jié)是一篇 JavaScript 簡(jiǎn)介,因此這個(gè)階段不會(huì)對(duì) JavaScript 語(yǔ)言和上述工具做過多的介紹。之后可以到 JavaScript 學(xué)習(xí)區(qū) 和 MDN 的其它地方學(xué)習(xí)更多細(xì)節(jié)。

          下面對(duì)語(yǔ)言核心做一個(gè)不完整介紹,期間還可以接觸到一些瀏覽器 API 特性。

          “Hello World!”示例

          讀到這里你一定很激動(dòng),誠(chéng)然 —— JavaScript 是最振奮人心的 Web 技術(shù)之一,而且在嫻熟駕馭之后,你的網(wǎng)站在功能和創(chuàng)新力上將達(dá)到一個(gè)新的維度。

          然而,JavaScript 比 HTML 和 CSS 學(xué)習(xí)起來更加復(fù)雜一點(diǎn),所以必須一步一個(gè)腳印地學(xué)習(xí)。首先,來看看如何在頁(yè)面中添加一些基本的信息 JavaScript 腳本來建造一個(gè) “Hello world!” 示例

          重要的是:如果你沒有完成之前的課程實(shí)踐,可聯(lián)系我獲取資料包繼續(xù)跟著練習(xí)哦,如果你要實(shí)踐,前兩篇筆記就是html和css階段的內(nèi)容哦。

          1. 首先,打開你的測(cè)試站點(diǎn),創(chuàng)建一個(gè)名為 scripts 的文件夾。然后在其中創(chuàng)建一個(gè)名為 main.js 的文件。
          2. 下一步,在index.html文件</body>標(biāo)簽前的新行添加以下代碼。
          <script src="scripts/main.js" defer></script>
          1. 與 CSS <link>的元素類似,它將** JavaScript**引入頁(yè)面以作用于 HTML(以及 CSS 等頁(yè)面上所有內(nèi)容);
          2. 現(xiàn)在將以下代碼添加到main.js文件中:
          let myHeading = document.querySelector('h1');
          myHeading.textContent = 'Hello world!';
          1. 最后,保存HTMLJavaScript 文件,用瀏覽器打開 index.html??梢钥吹饺缦聝?nèi)容:

          注:我們將 <script> 放在HTML文件的底部附近的原因是瀏覽器會(huì)按照代碼在文件中的順序加載 HTML。如果先加載的 JavaScript 期望修改其下方的 HTML,那么它可能由于 HTML 尚未被加載而失效。因此,將 JavaScript 代碼放在 HTML頁(yè)面的底部附近通常是最好的策略。

          發(fā)生了什么?

          JavaScript 把頁(yè)面的標(biāo)題改成了 “Hello world!” 。首先用 querySelector() 函數(shù)獲取標(biāo)題的引用,并把它儲(chǔ)存在 myHeading 變量中。這與 CSS 選擇器的用法非常相像:若要對(duì)某個(gè)元素進(jìn)行操作,首先得選擇它。

          之后,把 myHeading 變量的屬性 textContent (標(biāo)題內(nèi)容)修改為 Hello world!” 。

          注:上面用到的兩個(gè)函數(shù)都來自文檔對(duì)象模型 (DOM) API, 均用于控制文檔。

          JavaScript 快速入門

          我們來學(xué)習(xí)一些 JavaScript 的核心特性,從而更好地理解它的運(yùn)行機(jī)制。學(xué)習(xí)這些知識(shí)很有意義,因?yàn)檫@些原理普遍適用于所有編程語(yǔ)言,掌握好它們,可以做到融會(huì)貫通。

          重要:學(xué)習(xí)本節(jié)時(shí),請(qǐng)嘗試將示例代碼輸入到 JavaScript 控制臺(tái)里看看會(huì)發(fā)生什么。 JavaScript 控制臺(tái)的更多信息請(qǐng)查看 瀏覽器開發(fā)者工具。

          變量(Variable)

          變量 (en-US) 是存儲(chǔ)能量的容器。要聲明一個(gè)變量,先輸入關(guān)鍵字 letvar,然后輸入合適的名稱:

          let myVariable;

          注:行末的分號(hào)表示當(dāng)前語(yǔ)句結(jié)束,不過只有在單行內(nèi)需要分割多條語(yǔ)句時(shí),這個(gè)分號(hào)才是必須的。然而,一些人認(rèn)為每條語(yǔ)句末尾加分號(hào)是一種好的風(fēng)格。

          注:幾乎任何內(nèi)容都可以作為變量名,但還是有一些限制(請(qǐng)參閱 變量命名規(guī)則)。如果你不確定,還可以 驗(yàn)證變量名 是否有效。

          注:JavaScript 對(duì)大小寫敏感,myVariablemyvariable 是不同的。如果代碼出現(xiàn)問題了,先檢查一下大小寫!

          注:想要了解更多關(guān)于 varlet 的不同點(diǎn),可以參閱 var 與 let 的區(qū)別。

          變量定義后可以進(jìn)行賦值:

          myVariable = '李雷';

          也可以將定義、賦值操作寫在同一行:

          let myVariable = '李雷';

          可以直接通過變量名取得變量的值:

          myVariable;

          變量在賦值后是可以更改的:

          let myVariable = '李雷';
          myVariable = '韓梅梅';

          注意變量可以有不同的 數(shù)據(jù)類型 :

          變量

          解釋

          示例

          String

          字符串(一串文本):字符串的值必須用引號(hào)(單雙均可,必須成對(duì))擴(kuò)起來。

          let myVariable = '李雷';

          Number

          數(shù)字:無需引號(hào)。

          let myVariable = 10;

          Boolean

          布爾值(真 / 假): true/false 是 JS 里面的特殊關(guān)鍵字,無需引號(hào)。

          let myVariable = true;

          Array

          數(shù)組:用于在單一引用中存儲(chǔ)多個(gè)值的結(jié)構(gòu)。

          let myVariable = [1, '李雷', '韓梅梅', 10]; 元素引用方法:myVariable[0], myVariable[1] ……

          Object

          對(duì)象:JavaScript 里一切皆可對(duì)象,一切皆可儲(chǔ)存在變量里。這一點(diǎn)要牢記于心。

          let myVariable = document.querySelector('h1'); 以及上面所有示例都是對(duì)象。

          那么變量有什么用呢?我們說,編程時(shí)它們無所不在。如果知道無法改變,那么就無法做任何動(dòng)態(tài)的工作,比如發(fā)送個(gè)性化的問候,或是改變?cè)趫D片庫(kù)當(dāng)前展示的圖片。

          注釋

          類似于 CSS,JavaScript 中間可以添加注釋。

          /*
          這里的所有內(nèi)容
          都是注釋。
          */

          如果注釋只有一行,可以更簡(jiǎn)單地將注釋放在兩個(gè)斜杠之后,就像這樣:

          // 這是一條注釋。

          運(yùn)算符

          運(yùn)算符 (en-US)是一類數(shù)學(xué)符號(hào),可以根據(jù)兩個(gè)值(或變量)產(chǎn)生結(jié)果。以下表格中介紹了一些最簡(jiǎn)單的運(yùn)算符,可以在瀏覽器控制臺(tái)里嘗試一下后面的示例。

          譯注:這里說“根據(jù)兩個(gè)值(或變量)產(chǎn)生結(jié)果”是不嚴(yán)謹(jǐn)?shù)?,?jì)算兩個(gè)變量的運(yùn)算符稱為“二元運(yùn)算符”,還有一元運(yùn)算符和三元運(yùn)算符,下表中的“取非”就是一元運(yùn)算符。

          運(yùn)算符

          解釋

          符號(hào)

          示例

          將兩個(gè)數(shù)字相加,或拼接成兩個(gè)字符串。

          +

          6 + 9;"Hello " + "world!";

          減、乘、除

          這些運(yùn)算符操作與基礎(chǔ)算術(shù)一致。只是乘法寫作星號(hào),除法寫作斜杠。

          -, *, /

          9 - 3;8 * 2; //乘法在JS中是一個(gè)星號(hào)9 / 3;

          賦值運(yùn)算符

          為變量賦值(你之前已經(jīng)見過這個(gè)符號(hào)了)

          =

          let myVariable = '李雷';

          等于

          測(cè)試兩個(gè)值是否相等,并返回一個(gè) true/false (布爾)值。

          ===

          let myVariable = 3;myVariable === 4; // false

          不等于

          和等于運(yùn)算符相反,測(cè)試兩個(gè)值是否不相等,并返回一個(gè) true/false (布爾)值。

          !==

          let myVariable = 3;myVariable !== 3; // false

          取非

          返回邏輯相反的值,比如當(dāng)前值為真,則返回 false

          !

          原式為真,但經(jīng)取非后值為 falselet myVariable = 3;!(myVariable === 3); // false

          運(yùn)算符種類遠(yuǎn)不止這些,不過目前上表已經(jīng)夠用了。完整列表請(qǐng)參閱 表達(dá)式和運(yùn)算符。

          注:不同類型數(shù)據(jù)之間的計(jì)算可能出現(xiàn)奇怪的結(jié)果,因此必須正確引用變量,才能得出預(yù)期結(jié)果。比如在控制臺(tái)輸入 "35" + "25",為什么不能得到 60?因?yàn)橐?hào)將數(shù)字轉(zhuǎn)換成了字符串,所以結(jié)果是連接兩個(gè)字符串而不是把兩個(gè)數(shù)字相加。輸入 35 + 25 才能得到正確結(jié)果。

          條件語(yǔ)句

          條件語(yǔ)句是一種代碼結(jié)構(gòu),用來測(cè)試表達(dá)式的真假,并根據(jù)測(cè)試結(jié)果運(yùn)行不同的代碼。一個(gè)常用的條件語(yǔ)句是 if ... else。下面是一個(gè)示例:

          let iceCream = 'chocolate';
          if (iceCream === 'chocolate') {
            alert('我最喜歡巧克力冰激淋了。');
          } else {
            alert('但是巧克力才是我的最愛呀……');
          }

          if ( ... ) 中的表達(dá)式進(jìn)行測(cè)試,用(上文所提到的)等于運(yùn)算符來比較變量 iceCream 與字符串 'chocolate' 是否相等。 如果返回 true,則運(yùn)行第一個(gè)代碼塊;如果返回 false,則跳過第一塊直接運(yùn)行 else 之后的第二個(gè)代碼塊。

          函數(shù)(Function)

          函數(shù) 用來封裝可復(fù)用的功能。如果沒有函數(shù),一段特定的操作過程用幾次就要重復(fù)寫幾次,而使用函數(shù)則只需寫下函數(shù)名和一些簡(jiǎn)短的信息。之前已經(jīng)涉及過一些函數(shù),比如:

          let myVariable = document.querySelector('h1');
          alert('hello!');

          document.querySelectoralert 是瀏覽器內(nèi)置的函數(shù),隨時(shí)可用。

          如果代碼中有一個(gè)類似變量名后加小括號(hào) () 的東西,很可能就是一個(gè)函數(shù)。函數(shù)通常包括參數(shù),參數(shù)中保存著一些必要的數(shù)據(jù)。它們位于括號(hào)內(nèi)部,多個(gè)參數(shù)之間用逗號(hào)分開。

          比如, alert() 函數(shù)在瀏覽器窗口內(nèi)彈出一個(gè)警告框,還應(yīng)為其提供一個(gè)字符串參數(shù),以告訴它警告框里要顯示的內(nèi)容。

          好消息是:人人都能定義自己的函數(shù)。下面的示例是為兩個(gè)參數(shù)進(jìn)行乘法運(yùn)算的函數(shù):

          function multiply(num1, num2) {
            let result = num1 * num2;
            return result;
          }

          嘗試在控制臺(tái)運(yùn)行這個(gè)函數(shù),不妨多試幾組參數(shù),比如:

          multiply(4, 7);
          multiply(20, 20);
          multiply(0.5, 3);

          注:return語(yǔ)句告訴瀏覽器當(dāng)前函數(shù)返回 result 變量。這是一點(diǎn)很有必要,因?yàn)楹瘮?shù)內(nèi)定義的變量只能在函數(shù)內(nèi)使用。這叫做變量的 作用域。(詳見 變量作用域。)

          事件

          事件能為網(wǎng)頁(yè)添加真實(shí)的交互能力。它可以捕捉瀏覽器操作并運(yùn)行一些代碼做為響應(yīng)。最簡(jiǎn)單的事件是 點(diǎn)擊事件,鼠標(biāo)的點(diǎn)擊操作會(huì)觸發(fā)該事件。 可嘗試將下面的代碼輸入到控制臺(tái),然后點(diǎn)擊頁(yè)面的任意位置:

          document.querySelector('html').onclick = function() {
              alert('別戳我,我怕疼。');
          }

          Copy to Clipboard

          將事件與元素綁定有許多方法。在這里選用了<html>元素,把一個(gè)匿名函數(shù)(就是沒有命名的函數(shù),這里的匿名函數(shù)包含單擊鼠標(biāo)時(shí)要運(yùn)行的代碼)賦值給了html的onclick (en-US) 屬性。

          請(qǐng)注意:

          document.querySelector('html').onclick = function() {};

          等價(jià)于

          let myHTML = document.querySelector('html');
          myHTML.onclick = function() {};

          只是前者更簡(jiǎn)潔。

          完善示例網(wǎng)頁(yè)

          現(xiàn)在你已經(jīng)具備了一些 JavaScript 基礎(chǔ),下面來為示例網(wǎng)頁(yè)添加一些更酷的特性。

          添加一個(gè)圖像切換器

          這里將用新的 DOM API 為網(wǎng)頁(yè)添加另一張圖片,并用 JavaScript 使圖片在點(diǎn)擊時(shí)進(jìn)行切換。

          1. 首先,找到另一張你想要在你的頁(yè)面上展示的圖片,且尺寸與第一張圖片盡可能相同。
          2. 將這張圖片儲(chǔ)存在你的images目錄下。
          3. 將圖片重命名為'firefox2.png'(去掉引號(hào))。
          4. 打開main.js文件,輸入下面的JavaScript 代碼 ( 請(qǐng)刪除剛才的 "hello world" 腳本):
          let myImage = document.querySelector('img');
          myImage.onclick = function() {
              let mySrc = myImage.getAttribute('src');
              if(mySrc === 'images/firefox-icon.png') {
                myImage.setAttribute('src', 'images/firefox2.png');
              } else {
                myImage.setAttribute('src', 'images/firefox-icon.png');
              }
          }

          5、保存所有文件并用瀏覽器打開 index.html 。點(diǎn)擊圖片可以發(fā)現(xiàn)它能夠切換了!

          這里首先把<img> 元素的引用存放在myImage變量里。然后將這個(gè)變量的onclick事件與一個(gè)匿名函數(shù)綁定。每次點(diǎn)擊圖片時(shí):

          1. 獲取這張圖片的 src 屬性值。
          2. 用一個(gè)條件句來判斷src的值是否等于原始圖像的路徑:
            1. 如果是,則將 src 的值改為第二張圖片的路徑,并在 `` 內(nèi)加載該圖片。
            2. 如果不是(意味著它已經(jīng)修改過), 則把 src 的值重新設(shè)置為原始圖片的路徑,即原始狀態(tài)。

          添加個(gè)性化歡迎信息

          下面來添加另一段代碼,在用戶初次進(jìn)入站點(diǎn)時(shí)將網(wǎng)頁(yè)的標(biāo)題改成一段個(gè)性化歡迎信息(即在標(biāo)題中添加用戶的名字)。名字信息會(huì)由 Web Storage API 保存下來,即使用戶關(guān)閉頁(yè)面之后再重新打開,仍可得到之前的信息。還會(huì)添加一個(gè)選項(xiàng),可以根據(jù)需要改變用戶名字以更新歡迎信息。

          1、打開index.html, 在<script>標(biāo)簽添加以下代碼,將在頁(yè)面底部顯示一個(gè)“切換用戶”字樣的按鈕:

          <button>切換用戶</button>

          2、將以下 JavaScript 代碼原封不動(dòng)添加到main.js文件底部,將獲取新按鈕和標(biāo)題的引用,并保存至變量中:

          let myButton = document.querySelector('button');
          let myHeading = document.querySelector('h1');

          3、然后添加以下函數(shù)來設(shè)置個(gè)性化歡迎信息。(函數(shù)需要在調(diào)用后生效,下文中提供了兩種對(duì)該函數(shù)的調(diào)用方式)

          function setUserName() {
            let myName = prompt('請(qǐng)輸入你的名字。');
            localStorage.setItem('name', myName);
            myHeading.textContent = '跟著艾編程學(xué)習(xí),太有成就感了,' + myName;
          }

          該函數(shù)首先調(diào)用了prompt()函數(shù), 與alert()類似會(huì)彈出一個(gè)對(duì)話框。但是這里需要用戶輸入數(shù)據(jù),并在確定后將數(shù)據(jù)存儲(chǔ)在myName變量里。接下來將調(diào)用localStorageAPI ,它可以將數(shù)據(jù)存儲(chǔ)在瀏覽器中供后續(xù)獲取。這里用localStorage的setItem()函數(shù)來創(chuàng)建一個(gè)'name'數(shù)據(jù)項(xiàng),并把myName變量復(fù)制給它。最后將textContent屬性設(shè)置為一個(gè)歡迎字符串加上這個(gè)新設(shè)置的名字。

          4、接下來,添加以下的if ... else 塊。我們可以稱之為初始化代碼,因?yàn)樗陧?yè)面初次讀取時(shí)進(jìn)行構(gòu)造工作:

          if(!localStorage.getItem('name')) {
          setUserName();
          } else {
          let storedName = localStorage.getItem('name');
          myHeading.textContent = '跟著艾編程學(xué)習(xí),太有成就感了,' + storedName;
          }

          5、Copy to Clipboard這里首次使用了取非運(yùn)算符(邏輯非,用!表示)來檢測(cè)'name'數(shù)據(jù)是否存在。若不存在,調(diào)用setUserName()創(chuàng)建。若存在(即用戶上次訪問時(shí)設(shè)置過),調(diào)用getItem()獲取保存的名字,像上文的setUserName()那樣設(shè)置textContent。

          1. 最后,為按鈕設(shè)置 onclick 事件處理器。按鈕按下時(shí)運(yùn)行 setUserName() 函數(shù)。這樣用戶就可以通過按這個(gè)按鈕來自由設(shè)置新名字了:
          myButton.onclick = function() {
          setUserName();
          }

          第一次訪問網(wǎng)頁(yè)時(shí),頁(yè)面將詢問用戶名并發(fā)出一段個(gè)性化的信息。可隨時(shí)點(diǎn)擊按鈕來改變用戶名 。告訴你一個(gè)額外的福利,因?yàn)橛脩裘潜4嬖?localStorage 里的,網(wǎng)頁(yè)關(guān)閉后也不會(huì)丟失,所以重新打開瀏覽器時(shí)所設(shè)置的名字信息將依然存在:)

          用戶名為 null

          運(yùn)行示例代碼,彈出輸入用戶名的對(duì)話框,試著按下 取消 按鈕。此時(shí)標(biāo)題會(huì)顯示為 “跟著艾編程學(xué)習(xí)太有成就感了,null”。這是因?yàn)槿∠崾緦?duì)話框后值將設(shè)置為 null,這是 JavaScript 中的一個(gè)特殊值,表示引用不存在。

          也可以不輸入任何名字直接按 確認(rèn),你的標(biāo)題會(huì)顯示為“跟著艾編程學(xué)習(xí)太有成就感了,”,原因么顯而易見。要避免這些問題,應(yīng)該更新 setUserName() 來檢查用戶是否輸入了 null 或者空名字:

          function setUserName() {
            let myName = prompt('請(qǐng)輸入你的名字。');
            if(!myName || myName === null) {
              setUserName();
            } else {
              localStorage.setItem('name', myName);
              myHeading.innerHTML = '跟著艾編程學(xué)習(xí)太有成就感了,' + myName;
            }
          }

          用人話說就是:如果 myName 沒有值或值為 null,就再次從頭運(yùn)行setUserName()。如果有值(上面的表達(dá)式結(jié)果不為真),就把值存儲(chǔ)到 localStorage 并且設(shè)置標(biāo)題。

          小結(jié)

          如果你按部就班完成本文的實(shí)踐,那么最終可以得到以下頁(yè)面

          相關(guān)推薦:

          1. 前端新手看過來,手把手帶你輕松上手html的實(shí)操
          2. 前端新手看過來,教你從零CSS做漂亮網(wǎng)頁(yè),這樣學(xué)習(xí)太有成就感了

          ue (讀音 /vju?/,類似于 View) 是一套用于構(gòu)建用戶界面的漸進(jìn)式框架。與其它大型框架不同的是,Vue 被設(shè)計(jì)為可以自底向上逐層應(yīng)用。Vue 的核心庫(kù)只關(guān)注視圖層,不僅易于上手,還便于與第三方庫(kù)或既有項(xiàng)目整合。另一方面,當(dāng)與現(xiàn)代化的工具鏈以及各種支持類庫(kù)結(jié)合使用時(shí),Vue 也完全能夠?yàn)閺?fù)雜的單頁(yè)應(yīng)用提供驅(qū)動(dòng)。

          一、MVVM模式和第一個(gè)Vue程序

          1.什么是 MVVM

          • 該層向上與視圖層進(jìn)行雙向數(shù)據(jù)綁定
          • 向下與 Model 層通過接口請(qǐng)求進(jìn)行數(shù)據(jù)交互

          • Vue的安裝方式:

          ??1.1 使用CDN方法(初學(xué)者使用)
          ??也可以直接使用CDN的方式引入,代碼如下:

          <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>

          1.2Vue-cli腳手架
          ??利用Vue-cli 腳手架構(gòu)建Vue項(xiàng)目,在后面第七點(diǎn)詳細(xì)講解。(中大型項(xiàng)目中推薦使用)。

          2.第一個(gè)Vue程序

          ?1、創(chuàng)建一個(gè) HTML 文件

          ?2、引入 Vue.js

          <script src="https://cdn.jsdelivr.net/npm/vue@2.5.21/dist/vue.js"></script>

          完整示例:

          <!DOCTYPE html>
            <html>
          <head lang="en">
              <meta charset="UTF-8">
              <title>貝西說</title>
              <!--1.引入vue.js-->
              <script src="https://cdn.jsdelivr.net/npm/vue@2.5.21/dist/vue.js"></script>
          </head>
          <body>
          <!--view視圖-->
           <div id="app">
               <input type="text" v-model="message"/>
               {{message}}
           </div>
           <script>
               var vue=new Vue({
                  el:"#app",
                   /*model數(shù)據(jù)*/
                   data:{
                       message:"hello,vue"
                   }
               });
           </script>
          </body>
          </html>

          演示效果:(視圖驅(qū)動(dòng)數(shù)據(jù),數(shù)據(jù)驅(qū)動(dòng)視圖)

          二、基礎(chǔ)語(yǔ)法

          v-bind

          v-bind就是用于綁定數(shù)據(jù)和元素屬性的
          完整示例:

          <body>
            <div class="app">
                  <a v-bind:href="url">點(diǎn)我</a>
              </div>
           <script>
               var app = new Vue({
                   el:'.app',
                   data:{
                       url:"https://www.baidu.com",
                   }
               });
           </script>
          </body>

          注意:
          ? v-bind后面是:屬性名=,我的理解是表示綁定這個(gè)屬性,綁定之后,對(duì)應(yīng)的值要去vue的數(shù)據(jù)里面找。
          ? 當(dāng)我們?cè)诳刂婆_(tái)改變url時(shí),對(duì)應(yīng)也會(huì)變化。

          相同的,我們還可以綁定圖片src屬性、超鏈接的class

          <body>
              <div class="app">
                <a v-bind:href="url">點(diǎn)我</a>
                  <img v-bind:src="imgsrc" width="200px"/>
              </div>
           <script>
               var app = new Vue({
                   el:'.app',
                   data:{
                       url:"https://www.baidu.com",
                       imgsrc:"https://cn.vuejs.org/images/logo.png"
                   }
               });
           </script>
          </body>

          注意:

          <div class="app">
          	  <a v-bind:href="url">點(diǎn)我</a>
          </div>  

          通常我們可以將v-bind:簡(jiǎn)寫成:

          <div class="app">
          <a :href="url">點(diǎn)我</a>
          </div>

          v-if,v-else

          v-if,v-else

          完整示例:

          <body>
              <div id="app">
                <div v-if="ok">YES</div>
                  <div v-else>NO</div>
              </div>
               <script>
                   var app = new Vue({
                       el:"#app",
                       data:{
                           ok:true,
                       }
                   });
               </script>
          </body>

          v-if,v-else-if,v-else

          <body>
              <div id="app">
                <div v-if="role=='beixi'|| role=='admin'">您好,admin</div>
                  <div v-else-if="role=='jzj'">賈志杰</div>
                  <div v-else>您無權(quán)訪問!</div>
              </div>
               <script>
                   var app = new Vue({
                       el:"#app",
                       data:{
                           role:"admin",
                       }
                   });
               </script>
          </body>

          v-for

          ?1、v-for循環(huán)普通數(shù)組

          <body>
            <div id="app">
                  <p v-for="(item,index) in list">{{item}}----索引:{{index}}</p>
              </div>
               <script>
                   var app = new Vue({
                       el:"#app",
                       data:{
                          list:[1,2,3,4,5],
                       }
                   });
               </script>
          </body>

          2、v-for循環(huán)對(duì)象數(shù)組

          <body>
          <div id="app">
                  <p v-for="(user,index) in list">{{user.id}}---{{user.name}}-----索引:{{index}}</p>
              </div>
               <script>
                   var app = new Vue({
                       el:"#app",
                       data:{
                          list:[
                              {id:1,name:'beixi'},
                              {id:2,name:'jzj'},
                              {id:3,name:'賈志杰'}
                          ],
                       }
                   });
               </script>
          </body>

          3、v-for循環(huán)對(duì)象

          <body>
            <div id="app">
                  <p v-for="(val,key,index) in user">值:{{val}}---鍵:{{key}}-----索引:{{index}}</p>
              </div>
               <script>
                   var app = new Vue({
                       el:"#app",
                       data:{
                          user:{
                              name:"beixi",
                              age:"18",
                              sex:"男"
                          }
                       }
                   });
               </script>
          </body>

          ?4、v-for循環(huán)數(shù)字

          <body>
            <div id="app">
                  <p v-for="count in 5">這是第{{count}}次循環(huán)</p>
              </div>
               <script>
                   var app = new Vue({
                       el:"#app",
                       data:{ }
                   });
               </script>
          </body>

          三、Vue綁定事件

          語(yǔ)法:

          ??v-on:事件名 = “方法名”
          ??簡(jiǎn)寫: @事件名 = “方法名”
          ??事件名: click|keydown|keyup|mouseover|mouseout|自定義事件名

          v-on事件監(jiān)聽,完整示例:

          <!DOCTYPE html>
            <html xmlns:v-on="http://www.w3.org/1999/xhtml">
          <head lang="en">
              <meta charset="UTF-8">
              <title>貝西說</title>
              <!--1.引入vue.js-->
              <script src="https://cdn.jsdelivr.net/npm/vue@2.5.21/dist/vue.js"></script>
          </head>
          <body>
              <div id="app">
                 {{count}}
                  <button v-on:click="count+=1">點(diǎn)我加1</button>
                  <button v-on:click="sub">點(diǎn)我減1</button>
              </div>
               <script>
                   var app = new Vue({
                       el:"#app",
                       data:{count:1 },
                       methods:{
                           sub:function(){
                              this.count-=1;
                           }
                       }
                   });
               </script>
          </body>
          </html>

          注意:v-bind可以簡(jiǎn)寫為 : v-on: 可以簡(jiǎn)寫@

          四、Vue:表單雙綁、組件

          1.什么是雙向數(shù)據(jù)綁定

          Vue.js 是一個(gè) MVVM 框架,即數(shù)據(jù)雙向綁定,即當(dāng)數(shù)據(jù)發(fā)生變化的時(shí)候,視圖也就發(fā)生變化,當(dāng)視圖發(fā)生變化的時(shí)候,數(shù)據(jù)也會(huì)跟著同步變化。這也算是 Vue.js 的精髓之處了。

          值得注意的是,我們所說的數(shù)據(jù)雙向綁定,一定是對(duì)于 UI 控件來說的,非 UI 控件不會(huì)涉及到數(shù)據(jù)雙向綁定。單向數(shù)據(jù)綁定是使用狀態(tài)管理工具的前提。如果我們使用 vuex,那么數(shù)據(jù)流也是單項(xiàng)的,這時(shí)就會(huì)和雙向數(shù)據(jù)綁定有沖突。

          2.在表單中使用雙向數(shù)據(jù)綁定

          ??你可以用 v-model 指令在表單 、 及 元素上創(chuàng)建雙向數(shù)據(jù)綁定。它會(huì)根據(jù)控件類型自動(dòng)選取正確的方法來更新元素。盡管有些神奇,但 v-model 本質(zhì)上不過是語(yǔ)法糖。它負(fù)責(zé)監(jiān)聽用戶的輸入事件以更新數(shù)據(jù),并對(duì)一些極端場(chǎng)景進(jìn)行一些特殊處理。

          ??注意:v-model 會(huì)忽略所有表單元素的 value、checked、selected 特性的初始值而總是將 Vue 實(shí)例的數(shù)據(jù)作為數(shù)據(jù)來源。你應(yīng)該通過 JavaScript 在組件的 data 選項(xiàng)中聲明初始值!
          示例1:

          <body>
            <div id="app">
                  <input type="text"  v-model="message"/>{{message}}
              </div>
               <script>
                   var app = new Vue({
                       el:"#app",
                       data:{message:'' }
                   });
               </script>
          </body>

          完成效果:

          示例2:

            <div id="app">
              <input type="radio" name="sex" value="男" v-model="gender"/>男
                  <input type="radio" name="sex" value="女" v-model="gender"/>女
                  <p>{{gender}}</p>
              </div>
               <script>
                   var app = new Vue({
                       el:"#app",
                       data:{gender:'' }
                   });
               </script>

          示例3:

          <body>
            <div id="app">
                  <select v-model="selected">
                      <option value="">--請(qǐng)選擇--</option>
                      <option value="北京">北京</option>
                      <option value="上海">上海</option>
                      <option value="廣州">廣州</option>
                  </select>
                  <p>{{selected}}</p>
              </div>
               <script>
                   var app = new Vue({
                       el:"#app",
                       data:{selected:'' }
                   });
               </script>
          </body>

          3.什么是組件

          ??組件是可復(fù)用的 Vue 實(shí)例,說白了就是一組可以重復(fù)使用的模板,跟 JSTL 的自定義標(biāo)簽、Thymeleaf 的 th:fragment 等框架有著異曲同工之妙。
          ??通常一個(gè)應(yīng)用會(huì)以一棵嵌套的組件樹的形式來組織:

          例如,你可能會(huì)有頁(yè)頭、側(cè)邊欄、內(nèi)容區(qū)等組件,每個(gè)組件又包含了其它的像導(dǎo)航鏈接、博文之類的組件。

          4.簡(jiǎn)單定義一個(gè)組件

          注意:在實(shí)際開發(fā)中,我們并不會(huì)用以下方式開發(fā)組件,而是采用 vue-cli 創(chuàng)建 .vue 模板文件的方式開發(fā),以下方法只是為了讓大家理解什么是組件。

            <div id="app">
              <beixi></beixi>
              </div>
               <script>
           	    //注冊(cè)組件
                   Vue.component("beixi",{
                       template:'<li>hello</li>'
                   });
                   var app = new Vue({
                       el:"#app",
                   });
               </script>

          說明:

          • Vue.component():注冊(cè)組件
          • beixi:自定義組件的名字
          • template:組件的模板

          5.使用props屬性動(dòng)態(tài)傳遞參數(shù)

          <body>
            <div id="app">
                  <!--組件:使用props把值傳遞給組件-->
                  <blog-post v-for="item in items" v-bind:value="item"></blog-post>
              </div>
               <script>
                   Vue.component("blog-post",{
                       props:['value'],
                       template:'<li>{{value}}</li>'
                   });
                   var app = new Vue({
                       el:"#app",
                       data:{
                           items:['beixi','jzj','賈志杰']
                       }
                   });
               </script>
          </body>

          說明:

          v-for=“item in items”:遍歷 Vue 實(shí)例中定義的名為 items 的數(shù)組,并創(chuàng)建同等數(shù)量的組件

          v-bind:value=“item”:將遍歷的 item 項(xiàng)綁定到組件中 props 定義的名為 value屬性上;= 號(hào)左邊的 value 為 props 定義的屬性名,右邊的為 item in items 中遍歷的 item 項(xiàng)的值

          五、Axios異步通信

          1.什么是Axios

          ??Axios 是一個(gè)開源的可以用在瀏覽器端和 NodeJS 的異步通信框架,她的主要作用就是實(shí)現(xiàn) AJAX 異步通信,其功能特點(diǎn)如下:

          • 從瀏覽器中創(chuàng)建 XMLHttpRequests
          • 從 node.js 創(chuàng)建 http 請(qǐng)求
          • 支持 Promise API [JS中鏈?zhǔn)骄幊蘛
          • 攔截請(qǐng)求和響應(yīng)
          • 轉(zhuǎn)換請(qǐng)求數(shù)據(jù)和響應(yīng)數(shù)據(jù)
          • 取消請(qǐng)求
          • 自動(dòng)轉(zhuǎn)換 JSON 數(shù)據(jù)
          • 客戶端支持防御 XSRF(跨站請(qǐng)求偽造)

          ??GitHub:https://github.com/axios/axios

          ??中文文檔:http://www.axios-js.com/

          2.為什么要使用 Axios

          ??由于 Vue.js 是一個(gè) 視圖層框架 并且作者(尤雨溪)嚴(yán)格準(zhǔn)守 SoC (關(guān)注度分離原則),所以 Vue.js 并不包含 AJAX 的通信功能,為了解決通信問題,作者單獨(dú)開發(fā)了一個(gè)名為 vue-resource 的插件,不過在進(jìn)入 2.0 版本以后停止了對(duì)該插件的維護(hù)并推薦了 Axios 框架。少用jQuery,因?yàn)樗僮鱀om太頻繁!

          3.第一個(gè) Axios 應(yīng)用程序

          ??咱們開發(fā)的接口大部分都是采用 JSON 格式,可以先在項(xiàng)目里模擬一段 JSON 數(shù)據(jù),數(shù)據(jù)內(nèi)容如下:創(chuàng)建一個(gè)名為 data.json 的文件并填入上面的內(nèi)容,放在項(xiàng)目的根目錄下

          {
            "name": "貝西說",
            "url": "https://blog.csdn.net/beixishuo",
              "page": 1,
            "isNonProfit": true,
            "address": {
              "street": "太谷",
              "city": "山西晉中",
              "country": "中國(guó)"
            },
            "links": [
              {
                "name": "bilibili",
                "url": "https://space.bilibili.com/474668932"
              },
              {
                "name": "貝西說",
                "url": "https://blog.csdn.net/beixishuo"
              },
              {
                "name": "百度",
                "url": "https://www.baidu.com/"
              }
            ]
          }

          完整示例:

              <!--引入 JS 文件-->
              <script src="https://cdn.jsdelivr.net/npm/vue@2.5.21/dist/vue.js"></script>
          	<!--在線引入axios。在項(xiàng)目開發(fā)中會(huì)安裝axios組件(npm install axios)-->
              <script src="https://unpkg.com/axios/dist/axios.min.js"></script>
          </head>
          <body>
          <div id="app">
              <div>{{info.name}}</div>
              <div>{{info.address}}</div>
              <a v-bind:href="info.url">貝西說</a>
          </div>
          <script>
              var app=new Vue({
                  el:"#app",
                  //data: 屬性
                  data:function(){//需要處理(返回)后臺(tái)數(shù)據(jù)在頁(yè)面上渲染時(shí)使用
                      return{
                          //請(qǐng)求的返回參數(shù)格式必須和json字符串一樣
                          info:{
                              name:null,//相當(dāng)于形參占位,實(shí)際參數(shù)data.json會(huì)賦予
                              url:null,
                              address:{
                                  street:null,
                                  city:null,
                                  country:null
                              }
                          }
                      }
                  },
                  mounted:function(){//mounted鉤子函數(shù),相當(dāng)于java中main函數(shù)??梢哉{(diào)用methods中定義的函數(shù)
                  // axios.get('data.json').then(resp=>(console.log(resp.data)));
                      axios.get('data.json').then(resp=>(this.info=resp.data));
                  }
              })
          </script>
          </body>

          注意:
          讀取本地json文件中的數(shù)據(jù)時(shí)讀取失敗,如圖


          解決方式就是右擊瀏覽器快捷方式,更改屬性,在目標(biāo)后面加上

          –allow-file-access-from-files

          說明:

          1. 在這里使用了 v-bind 將 a:href 的屬性值與 Vue 實(shí)例中的數(shù)據(jù)進(jìn)行綁定
          2. 使用 axios 框架的 get 方法請(qǐng)求 AJAX 并自動(dòng)將數(shù)據(jù)封裝進(jìn)了 Vue 實(shí)例的數(shù)據(jù)對(duì)象中
          3. 我們?cè)赿ata中的數(shù)據(jù)結(jié)構(gòu)必須要和Ajax響應(yīng)回來的數(shù)據(jù)格式匹配!

          4.axios API

          可以通過將相關(guān)配置傳遞給 axios 來進(jìn)行請(qǐng)求。

          axios(config)

          // 發(fā)送一個(gè) POST 請(qǐng)求
          axios({
          	method: 'post',
          	url: '/user/12345',
          	data: {
          	firstName: 'Fred',
          	lastName: 'Flintstone'
          	}
          });

          axios(url[, config])

          // 發(fā)送一個(gè) GET 請(qǐng)求 (GET請(qǐng)求是默認(rèn)請(qǐng)求模式)
          	axios('/user/12345');

          請(qǐng)求方法別名
          為了方便起見,已經(jīng)為所有支持的請(qǐng)求方法提供了別名。

          • axios.request(config)
          • axios.get(url [,config])
          • axios.delete(url [,config])
          • axios.head(url [,config])
          • axios.post(url [,data [,config]])
          • axios.put(url [,data [,config]])
          • axios.patch(url [,data [,config]])

          注意

          當(dāng)使用別名方法時(shí),不需要在config中指定url,method和data屬性。

          5.Vue的生命周期

          六、計(jì)算屬性

          1.什么是計(jì)算屬性

          ??當(dāng)一些數(shù)據(jù)需要根據(jù)其它數(shù)據(jù)變化時(shí),需要進(jìn)行處理才能去展示,雖然vue提供了綁定數(shù)據(jù)表達(dá)式綁定的方式,但是設(shè)計(jì)它的初衷只是用于簡(jiǎn)單運(yùn)算的。在模板中放入太多的邏輯會(huì)讓模板過重且難以維護(hù),對(duì)于一些比較復(fù)雜和特殊的計(jì)算有可能就捉襟見肘了,而且計(jì)算的屬性寫在模板里也不利于項(xiàng)目維護(hù)

          computed主要的作用:

          • ??分離邏輯(模板和數(shù)據(jù)分離)
          • 緩存值
          • ??雙向綁定(getter,setter)

          簡(jiǎn)單理解為:把計(jì)算的結(jié)果當(dāng)作屬性返回去

          2.完整示例

              <!--引入 JS 文件-->
              <script src="https://cdn.jsdelivr.net/npm/vue@2.5.21/dist/vue.js"></script>
          </head>
          <body>
          <div id="app">
              <input type="text"  v-model="num1"/><input type="text" v-model="num2"/>
              <p>求和結(jié)果{{result}}</p>
          </div>
          <script>
              var app=new Vue({
                  el:"#app",
                  data:{num1:1,num2:2},
                  computed:{//計(jì)算屬性
                     result:function(){
                         return parseInt(this.num1)+parseInt(this.num2);
                     }
                  }
              })
          </script>
          </body>

          3、methods方法與computed計(jì)算屬性區(qū)別

          1. 兩者的執(zhí)行結(jié)果是完全相同的
          2. 計(jì)算屬性是基于他們的依賴進(jìn)行緩存的,只有在相關(guān)依賴發(fā)生改變時(shí),他們才會(huì)重新求值,也就是說,只要他的依賴沒有發(fā)生變化,那么每次訪問的時(shí)候計(jì)算屬性都會(huì)立即返回之前的計(jì)算結(jié)果,不再執(zhí)行函數(shù)
          3. 每次觸發(fā)重新渲染時(shí),調(diào)用方法將總會(huì)再次執(zhí)行函數(shù)

          七、前端工程化 vue-cli

          Vue腳手架指的是vue-cli,它是一個(gè)專門為單頁(yè)面應(yīng)用快速搭建繁雜的腳手架,它可以輕松的創(chuàng)建新的應(yīng)用程序而且可用于自動(dòng)生成vue和webpack的項(xiàng)目模板。

          利用vue-cli腳手架來構(gòu)建Vue項(xiàng)目需要先安裝Node.js和NPM環(huán)境。
          1.Node.js的安裝

          Node.js的安裝比較簡(jiǎn)單,大家需要在node.js官網(wǎng)(https://nodejs.org/en/download/)下載并安裝node.js環(huán)境,windows的推薦下載Windows Installer (.msi)。同時(shí),大家會(huì)得到一個(gè)附送的NPM工具。

          a,安裝Node.js,雙擊下載好的node文件,如圖所示。

          安裝過程比較簡(jiǎn)單,一直“下一步”即可。
          b,環(huán)境變量配置:安裝完成后需要設(shè)置環(huán)境變量:即Path中添加安裝目錄(例如:D:\java\nodejs),如圖所示。

          c,點(diǎn)擊開始=》運(yùn)行=》輸入"cmd" => 輸入node -v如圖所示,驗(yàn)證安裝是否成功。

          2.npm安裝
          由于node.js已經(jīng)集成了npm,所以之前npm也一并安裝好了。所以在cmd終端輸入npm -v 來測(cè)試是否安裝成功。命令如圖 所示,出現(xiàn)版本提示表示安裝成功。

          3基本使用

          步驟如下:
          ① 搭建第一個(gè)完整的Vue-cli 腳手架構(gòu)建的項(xiàng)目。

          ② 安裝完成,輸入Vue -V,如果出現(xiàn)相應(yīng)的版本號(hào),則說明安裝成功。如圖7-6所示。

          ③ 我們可以使用vue-cli來快速生成一個(gè)基于webpack模板構(gòu)建的項(xiàng)目,如圖所示,項(xiàng)目名為vue-project。

          ④ 配置完成后,可以看到目錄下多出了一個(gè)項(xiàng)目文件夾,里面就是 vue-cli 創(chuàng)建的一個(gè)基于 webpack 的 vue.js 項(xiàng)目。
          然后進(jìn)入項(xiàng)目目錄(如:cd vue-project),使用 npm install安裝依賴,如圖所示。

          • 依賴安裝完成后,我們來看一下項(xiàng)目的目錄結(jié)構(gòu),如下所示:
          .
          |-- build                            // 項(xiàng)目構(gòu)建(webpack)相關(guān)代碼
          |   |-- build.js                     // 生產(chǎn)環(huán)境構(gòu)建代碼
          |   |-- check-version.js             // 檢查node、npm等版本
          |   |-- dev-client.js                // 熱重載相關(guān)
          |   |-- dev-server.js                // 構(gòu)建本地服務(wù)器
          |   |-- utils.js                     // 構(gòu)建工具相關(guān)
          |   |-- webpack.base.conf.js         // webpack基礎(chǔ)配置
          |   |-- webpack.dev.conf.js          // webpack開發(fā)環(huán)境配置
          |   |-- webpack.prod.conf.js         // webpack生產(chǎn)環(huán)境配置
          |-- config                           // 項(xiàng)目開發(fā)環(huán)境配置
          |   |-- dev.env.js                   // 開發(fā)環(huán)境變量
          |   |-- index.js                     // 項(xiàng)目一些配置變量
          |   |-- prod.env.js                  // 生產(chǎn)環(huán)境變量
          |   |-- test.env.js                  // 測(cè)試環(huán)境變量
          |-- node_modules		   //所需要依賴資源
          |-- src                              // 源碼目錄
          |   |--  assets                   	   //存放資產(chǎn)文件
          |   |-- components                   // vue公共組件
          |   |-- router                   	//存放路由js文件,用于頁(yè)面的跳轉(zhuǎn)
          |   |-- App.vue                        // 頁(yè)面入口文件
          |   |-- main.js                        // 程序入口文件,加載各種公共組件
          |-- static                           // 靜態(tài)文件,比如一些圖片,json數(shù)據(jù)等
          |   |-- data                           // 群聊分析得到的數(shù)據(jù)用于數(shù)據(jù)可視化
          |-- .babelrc                         // ES6語(yǔ)法編譯配置
          |-- .editorconfig                    // 定義代碼格式
          |-- .gitignore                       // git上傳需要忽略的文件格式
          |-- README.md                        // 項(xiàng)目說明
          |-- favicon.ico 
          |-- index.html                       // 入口頁(yè)面
          |-- package.json                     // 項(xiàng)目基本信息

          對(duì)于開發(fā)者更多操作的是src目錄:

          |-- src                              // 源碼目錄
          |   |--  assets                   	   //存放資產(chǎn)文件
          |   |-- components                   // vue公共組件
          |   |-- router                   	//存放路由js文件,用于頁(yè)面的跳轉(zhuǎn)
          |   |-- App.vue                        // 頁(yè)面入口文件
          |   |-- main.js   

          ④ 輸入npm run dev命令來啟動(dòng)項(xiàng)目,如圖所示。

          運(yùn)行成功后在瀏覽器輸入:http://localhost:8080,訪問項(xiàng)目結(jié)果如圖所示。

          符串是一種“元素受限"的序列,序列中的元素是單個(gè)字符。

          字符串使用一對(duì)單引號(hào)''或一對(duì)雙引號(hào)“”或一對(duì)三引號(hào)'''''''(或"""""")的定界符(delimiter)去界定一個(gè)字符串,并且不同的定界符可以相互嵌套。單引號(hào)或雙引號(hào)界定字符串時(shí)作用是一樣的,但要配對(duì),三引用可以使用三個(gè)單引號(hào)或三個(gè)雙引號(hào),也要配對(duì),可以定義一個(gè)多行字符串。

          Python不支持單字符類型,單字符在 Python 中也是作為一個(gè)字符串使用。

          字符除了支持使用加號(hào)連接字符串以外,還提供了大量的運(yùn)算符、對(duì)象方法、標(biāo)準(zhǔn)函數(shù)支持查找、替換、排版等操作。

          1 字符串的構(gòu)造

          1.1 按定義描述直接生成

          1.2 使用類型轉(zhuǎn)換str()生成

          1.3 使用join方法連接列表元素

          2 字符掃描(遍歷)

          也就是遍歷字符串的全部字符,一邊遍歷一邊處理。

          3 字符編碼和字符串比較

          字符串的基礎(chǔ)是字符。Python語(yǔ)言規(guī)定的字符集是國(guó)際語(yǔ)言字符集Unicode,這也規(guī)定了所有可用字符的編碼,每個(gè)字符對(duì)應(yīng)一個(gè)唯一的編碼。在計(jì)算機(jī)的存儲(chǔ)或傳輸中,字符也用二進(jìn)制位串表示,每個(gè)字符對(duì)應(yīng)一個(gè)二進(jìn)制位串,而每個(gè)二進(jìn)制位串對(duì)應(yīng)著一個(gè)整數(shù)。人們稱這個(gè)整數(shù)是字符的編碼。

          標(biāo)準(zhǔn)內(nèi)置函數(shù)ord(c)返回字符c對(duì)應(yīng)編碼(unicode的整數(shù)編碼);

          標(biāo)準(zhǔn)內(nèi)置函數(shù)chr(n)返回整數(shù)n對(duì)應(yīng)的字符:

          字符串的比較基于字符串的每個(gè)字符的編碼。

          除了用in和not in以外,還可以使用==、!=、<、<=、>、>=等比較運(yùn)算符,得到一個(gè)邏輯值。

          Unicode是一個(gè)符號(hào)集,它規(guī)定了符號(hào)的二進(jìn)制代碼,卻沒有規(guī)定二進(jìn)制代碼如何儲(chǔ)存。

          UTF-8(8-bit Unicode Transformation Format)是一種針對(duì)Unicode的可變長(zhǎng)度字符編碼(根據(jù)不同的符號(hào)而變化字節(jié)長(zhǎng)度),又稱萬(wàn)國(guó)碼。

          UTF-8 就是在互聯(lián)網(wǎng)上使用最廣的一種 Unicode 的實(shí)現(xiàn)方式。其他實(shí)現(xiàn)方式還包括 UTF-16(字符用兩個(gè)字節(jié)或四個(gè)字節(jié)表示)和 UTF-32(字符用四個(gè)字節(jié)表示),不過在互聯(lián)網(wǎng)上基本不用。UTF-8 是 Unicode 的實(shí)現(xiàn)方式之一。

          UTF-8 的編碼規(guī)則很簡(jiǎn)單,只有二條:

          1)對(duì)于單字節(jié)的符號(hào),字節(jié)的第一位設(shè)為0,后面7位為這個(gè)符號(hào)的 Unicode 碼。因此對(duì)于英語(yǔ)字母,UTF-8 編碼和 ASCII 碼是相同的。

          2)對(duì)于n字節(jié)的符號(hào)(n > 1),第一個(gè)字節(jié)的前n位都設(shè)為1,第n + 1位設(shè)為0,后面字節(jié)的前兩位一律設(shè)為10。剩下的沒有提及的二進(jìn)制位,全部為這個(gè)符號(hào)的 Unicode 碼。

          4 字符串類別判斷

          對(duì)象方法符合返回“True”的情況
          s.isupper()s不空且其中所有存在大小寫的字符都是大寫
          s.islower()s不空且其中所有存在大小寫的字符都是小寫
          s.isdigit()s不空且其中所有字符都是數(shù)字
          s.isalpha()s不空且其中所有字符都是字母
          s.isidentifier()s不空且其形式可以作為標(biāo)識(shí)符
          s.isspace()s不空且其中全是空白字符(空格、制表符、換行符)

          5 字符串大小寫轉(zhuǎn)換

          對(duì)象方法說明
          s.lower()拷貝后大寫的字母變成小寫
          s.upper()拷貝后小寫的字母變成大寫
          s.capitalize()拷貝后首字符大小、其余小寫
          s.swapcase()拷貝后大小寫調(diào)換

          6 字符串查找、替換、統(tǒng)計(jì)和空白字符控制

          對(duì)象方法說明
          s.find(sub)查找并返回字符串sub在s里首次出現(xiàn)的位置,如果沒有,返回-1
          s.find(sub,start,end)查找并返回字符串sub在s的指定區(qū)間里首次出現(xiàn)的位置,如果沒有,返回-1
          s.count(sub)統(tǒng)計(jì)sub在s里互不重疊的出現(xiàn)的次數(shù)
          s.count(sub,start,end)統(tǒng)計(jì)sub在s的指定區(qū)間里互不重疊的出現(xiàn)的次數(shù)
          s.replace(old,new)拷貝后把s里的old替換為new
          s.replace(old,new,count)拷貝后把s里的old替換為new,只做前count次替換
          s.strip()拷貝后刪去s兩端的空白字符(如果有)
          s.strip(chars)拷貝后刪去s兩端的與chars相同的字符(如果有)
          s.lstrip([chars])同上,僅限左端操作
          s.rstrip([chars])同上,僅限右端操作

          7 字符串和表相互轉(zhuǎn)換

          7.1 字符串分割,得到一個(gè)列表

          s.split([sep],[max])

          sep是用于切分的子串。默認(rèn)是連續(xù)空白字符段(空格/換行/制表符)

          max用于指定(從左向右處理時(shí))最大切分項(xiàng)數(shù),切分出指定項(xiàng)數(shù)后剩下的串作為結(jié)果表里的最后一個(gè)子串。

          切分時(shí)會(huì)丟掉s開頭和結(jié)尾的空白字符。

          如果想從右邊開始切分,可以使用s.rsplit()方法

          如果想按行切割,可以使用s.splitlines([keepends])

          可選參數(shù)keepends用于指定是否保留每行最后的換行符。

          7.2 列表元素連接,得到一個(gè)字符串

          切割的逆操作是連接,使用sep.join(list1)方法

          sep用于指定連接使用的分隔符。

          8 字符串與數(shù)字的轉(zhuǎn)換

          各種數(shù)值類型和字符串可以相互轉(zhuǎn)換:

          9 字符串格式化

          字符串格式化是指適當(dāng)?shù)丶右恍┛崭窕蚱渌址刃问綄?duì)字符串的處理,當(dāng)然也是生成一個(gè)新的字符串。

          9.1 字符串“對(duì)齊”的對(duì)象方法

          以下對(duì)象方法可以生成指定寬度(長(zhǎng)度)的字符串,并在給定的寬度內(nèi)對(duì)齊原字符串的位置,其余部分用空格填充。

          s.center(n)得到將s串居中的長(zhǎng)度為n的字符串,空格填充
          s.ljust(n)得到將s串居左的長(zhǎng)度為n的字符串,空格填充
          s.rjust(n)得到將s串居右的長(zhǎng)度為n的字符串,空格填充

          9.2 與C語(yǔ)言一致的使用點(diǎn)位符(%?)的格式化方式

          前面有用%號(hào)引導(dǎo)占位符,后面用變量或表達(dá)式去替換前面的占位符,形成一個(gè)表達(dá)式輸出

          9.3 字符串的format方法

          s = "The {} of 2 + 3 is {}"

          s.format("result",2+5)可以生成:

          The result of 2 + 3 is 7

          s描述了結(jié)果字符串的基本形式(模式),其中的{}稱為替換域,它們將分別被format中的實(shí)參表達(dá)式產(chǎn)生的字符串替代。

          在{}中還可以包含域名、字符類型、寬度,填充符號(hào)等內(nèi)容,如:

          {1:->10s}字符串形式,第1個(gè)實(shí)參寬10,>表示右對(duì)齊,填充字符是-
          {price:10.2f}浮點(diǎn)形式,域名為price,寬10個(gè)字符,2個(gè)小數(shù)位
          {:<<10d}十進(jìn)制整數(shù)形式,寬10字符,<表示居左,用字符<填充

          10 轉(zhuǎn)義字符與元字符串

          需要在字符中使用特殊字符(如容器類對(duì)象的界定符,鍵盤上不存在的字符,如制表符,換行符等)時(shí),python用反斜杠(\)轉(zhuǎn)義字符進(jìn)行轉(zhuǎn)義,也就是就這些字符當(dāng)作普通字符使用,不作特殊用途。轉(zhuǎn)義字符用反斜杠符號(hào)\引導(dǎo),如'\n'表示換行,'\''轉(zhuǎn)義單引號(hào);

          原始字符串用字母r引導(dǎo),如‘r,htttp\www.baidu:?'keyword',others',把一個(gè)字符串中的每個(gè)字符全部當(dāng)做普通字符使用,這樣可以減少轉(zhuǎn)義字符的使用,讓文本顯得更清晰。

          字符串的單雙引增加了字符串的靈活性,減少了轉(zhuǎn)義字符的使用,比如字符串中有單引號(hào)時(shí),最外層可以用雙引號(hào)。需要注意的是,字符串中不能出現(xiàn)和最外層引號(hào)相同的引號(hào)。

          更多內(nèi)容請(qǐng)參考:https://www.yiibai.com/python3/python_strings.html

          附原碼:

          s = 'a' #使用單引號(hào)定義一個(gè)單字符

          s0 = "hi,python" #直接通過定義描述構(gòu)造字符串(雙引號(hào))

          print(s,'\n',s0)

          list1 = [1,1,2,3,5,8,13]

          s2 = ""

          for s in list1:

          s2 += str(s) # 類型轉(zhuǎn)換str()

          print(s2)

          list2 = ['this', 'is', 'a', 'test!']

          s3 = ",".join(list2) # 拼接列表元素構(gòu)造字符串

          print(s3)

          s4 = '''Tom said,"Let's go."''' #不同定界符之間可以相互嵌套

          # 使用三引號(hào)定義一個(gè)多行字符串↓

          s5 = """string block:\n

          1st:

          2nd

          """

          print(s4,'\n',s5)

          '''

          a

          hi,python

          11235813

          this,is,a,test!

          Tom said,"Let's go."

          string block:

          1st:

          2nd

          '''

          s = "hi,python"

          lis = []

          for i in s: # 直接迭代元素

          lis.append(i)

          print(lis)

          lis = []

          for i in range(len(s)): # 通過下標(biāo)迭代元素

          lis.append(s[i])

          print(lis)

          '''

          ['h', 'i', ',', 'p', 'y', 't', 'h', 'o', 'n']

          ['h', 'i', ',', 'p', 'y', 't', 'h', 'o', 'n']

          '''

          print(ord('1'),ord('a'),ord('A'),ord('中'))

          print(chr(49),chr(97),chr(65),chr(20013))

          print("bad" in "not very bad")

          print("it is true" == "It is True")

          print('A' < 'a' )

          '''

          49 97 65 20013

          1 a A 中

          True

          False

          True

          '''

          # Python采用unicode編碼,漢字“中”的unicode編碼為\u4e2d

          print('\u4e2d',0x4e2d)

          '''中 20013'''

          print(hex(20013),'%x' % 20013) # 十進(jìn)制到16進(jìn)制

          '''0x4e2d 4e2d'''

          u = '中' # 指定字符串類型對(duì)象u,

          str1 = u.encode('gb2312') # 以gb2312編碼對(duì)u進(jìn)行編碼,獲得bytes類型對(duì)象

          print(str1)

          str3 = u.encode() # 以u(píng)tf-8編碼對(duì)u進(jìn)行編碼,獲得bytes類型對(duì)象

          print(str3)

          u1 = str1.decode('gb2312') # 以gb2312編碼對(duì)字符串str進(jìn)行解碼,獲得字符串類型對(duì)象

          u3 = str3.decode('utf-8') # 以u(píng)tf-8編碼對(duì)字符串str進(jìn)行解碼,獲得字符串類型對(duì)象

          print(bytes('中', encoding = "utf-8"))

          print(u1,u3)

          '''

          b'\xd6\xd0'

          b'\xe4\xb8\xad'

          b'\xe4\xb8\xad'

          中 中

          '''

          s = "this is a test! "

          print(s.islower()) # 判斷是否全部是小寫

          s2 = s.capitalize() # 拷貝后首字符大小、其余小寫

          print(s2)

          print(s.find('is'))

          print(s.count('is'))

          s3 = s.strip() # 拷貝后刪去s兩端的空白字符(如果有)

          print(s3)

          s4 = s.strip('th') # 拷貝后刪去s兩端的與chars相同的字符(如果有)

          print(s4)

          '''

          True

          False

          True

          True

          This is a test!

          2

          2

          this is a test!

          is is a test!

          '''

          s = "this is a test! "

          lis = s.split()

          print(lis)

          lis2 = ",".join(lis)

          print(lis2)

          '''

          ['this', 'is', 'a', 'test!']

          this,is,a,test!

          '''

          n = 999

          print('00000'+ str(n)) # 將數(shù)字轉(zhuǎn)換為字符串

          print(int('123')) # 字符串轉(zhuǎn)換為整數(shù)

          print(float('-1.23')) # 字符串轉(zhuǎn)換為實(shí)物

          '''

          00000999

          123

          -1.23

          '''

          from random import randint

          for i in range(5):

          print(str(randint(1,100)**4).rjust(10),

          str(randint(1,100)**4).rjust(10),

          str(randint(1,100)**4).rjust(10))

          '''

          2313441 13845841 40960000

          1336336 2085136 20736

          45212176 78074896 31640625

          614656 57289761 14776336

          38416 625 331776

          '''

          print('%2d-%02d' % (3, 1))

          sf = '%.2f' % 3.1415926

          print(sf)

          print('Age: %s. Gender: %s' % (25, True))

          print('growth rate: %d %%' % 7)

          '''

          3-01

          3.14

          Age: 25. Gender: True

          growth rate: 7 %

          '''

          s4 = "The {} of 2 + 3 is {}"

          s5 = s4.format("result",2+5)

          print(s5)

          '''

          The result of 2 + 3 is 7

          '''

          from math import sin,cos

          head = "{:<5} {:<12s} {:<12s}"

          content = "{:5.3f} {:12.10f} {:10.10f}"

          def gen_table(start, end, step):

          print(head.format("x","sin(x)","cos(x)"))

          x = start

          while x < end:

          print(content.format(x,sin(x),cos(x)))

          x += step

          gen_table(0.0, 1.05, 0.1)

          '''

          x sin(x) cos(x)

          0.000 0.0000000000 1.0000000000

          0.100 0.0998334166 0.9950041653

          0.200 0.1986693308 0.9800665778

          0.300 0.2955202067 0.9553364891

          0.400 0.3894183423 0.9210609940

          0.500 0.4794255386 0.8775825619

          0.600 0.5646424734 0.8253356149

          0.700 0.6442176872 0.7648421873

          0.800 0.7173560909 0.6967067093

          '''

          print(1.68,'\t',2.71828,'\t',3.14) # 使用轉(zhuǎn)義字符,\t表示制表符

          # print ('字符串中包含'"\/\n') # 語(yǔ)法錯(cuò)誤

          print ('字符串中包含\'"\/\n') # 使用轉(zhuǎn)義符號(hào)\轉(zhuǎn)義字符\

          print (r'字符串中包含\'"\/\n') # 字符串以字母r開頭表示使用原始字符串

          '''

          1.68 2.71828 3.14

          字符串中包含'"\/

          字符串中包含\'"\/\n

          '''

          -End-


          主站蜘蛛池模板: 午夜AV内射一区二区三区红桃视| 日韩精品中文字幕视频一区| 日本伊人精品一区二区三区| 亲子乱av一区区三区40岁| 亚洲国产成人久久一区久久| 国产一区二区三区播放心情潘金莲 | 国产一区二区三区樱花动漫| 精品视频一区二区三区在线观看| 国产一区二区三区在线看片| 在线|一区二区三区| 久久久久人妻一区二区三区| 亚洲乱码日产一区三区 | 日韩精品无码一区二区三区免费 | 亚洲国产成人久久一区二区三区 | 无码人妻精品一区二区三区在线 | 日韩视频一区二区在线观看| 精品国产a∨无码一区二区三区 | 欧洲精品一区二区三区在线观看| 亚欧在线精品免费观看一区| 久久久久人妻精品一区| 精品无码一区二区三区爱欲| 亚洲福利视频一区二区三区 | 亚洲综合无码精品一区二区三区| 乱色熟女综合一区二区三区| 日韩AV在线不卡一区二区三区 | 无码人妻精品一区二区三区久久| 免费精品一区二区三区第35| 一区二区免费视频| 色噜噜狠狠一区二区三区| 亚洲福利视频一区二区三区| 久久精品成人一区二区三区| 色屁屁一区二区三区视频国产| 国产成人av一区二区三区不卡| 无码AⅤ精品一区二区三区| 亚洲福利精品一区二区三区| 亚洲日韩精品一区二区三区无码| 久久一区二区三区免费播放| 97se色综合一区二区二区| 国产在线精品一区在线观看| A国产一区二区免费入口 | 日本一区二区高清不卡|