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
avaScript 是一門編程語(yǔ)言,可為網(wǎng)站添加交互功能(例如:游戲、動(dòng)態(tài)樣式、動(dòng)畫以及在按下按鈕或收到表單數(shù)據(jù)時(shí)做出的響應(yīng)等)。本文介紹了 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 特性。
讀到這里你一定很激動(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)容哦。
<script src="scripts/main.js" defer></script>
let myHeading = document.querySelector('h1');
myHeading.textContent = 'Hello world!';
注:我們將 <script> 放在HTML文件的底部附近的原因是瀏覽器會(huì)按照代碼在文件中的順序加載 HTML。如果先加載的 JavaScript 期望修改其下方的 HTML,那么它可能由于 HTML 尚未被加載而失效。因此,將 JavaScript 代碼放在 HTML頁(yè)面的底部附近通常是最好的策略。
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, 均用于控制文檔。
我們來學(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ā)者工具。
變量 (en-US) 是存儲(chǔ)能量的容器。要聲明一個(gè)變量,先輸入關(guān)鍵字 let 或 var,然后輸入合適的名稱:
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ì)大小寫敏感,myVariable 和 myvariable 是不同的。如果代碼出現(xiàn)問題了,先檢查一下大小寫!
注:想要了解更多關(guān)于 var 和 let 的不同點(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)算符 (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)取非后值為 false: let 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ǔ)句是一種代碼結(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ù) 用來封裝可復(fù)用的功能。如果沒有函數(shù),一段特定的操作過程用幾次就要重復(fù)寫幾次,而使用函數(shù)則只需寫下函數(shù)名和一些簡(jiǎn)短的信息。之前已經(jīng)涉及過一些函數(shù),比如:
let myVariable = document.querySelector('h1');
alert('hello!');
document.querySelector 和 alert 是瀏覽器內(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)潔。
現(xiàn)在你已經(jīng)具備了一些 JavaScript 基礎(chǔ),下面來為示例網(wǎng)頁(yè)添加一些更酷的特性。
這里將用新的 DOM API 為網(wǎng)頁(yè)添加另一張圖片,并用 JavaScript 使圖片在點(diǎn)擊時(shí)進(jìn)行切換。
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í):
下面來添加另一段代碼,在用戶初次進(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。
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è)置的名字信息將依然存在:)
運(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)題。
如果你按部就班完成本文的實(shí)踐,那么最終可以得到以下頁(yè)面
相關(guān)推薦:
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)。
??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)目中推薦使用)。
?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)視圖)
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>
語(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.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ù)綁定有沖突。
??你可以用 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>
??組件是可復(fù)用的 Vue 實(shí)例,說白了就是一組可以重復(fù)使用的模板,跟 JSTL 的自定義標(biāo)簽、Thymeleaf 的 th:fragment 等框架有著異曲同工之妙。
??通常一個(gè)應(yīng)用會(huì)以一棵嵌套的組件樹的形式來組織:
例如,你可能會(huì)有頁(yè)頭、側(cè)邊欄、內(nèi)容區(qū)等組件,每個(gè)組件又包含了其它的像導(dǎo)航鏈接、博文之類的組件。
注意:在實(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>
說明:
<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 是一個(gè)開源的可以用在瀏覽器端和 NodeJS 的異步通信框架,她的主要作用就是實(shí)現(xiàn) AJAX 異步通信,其功能特點(diǎn)如下:
??GitHub:https://github.com/axios/axios
??中文文檔:http://www.axios-js.com/
??由于 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太頻繁!
??咱們開發(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
說明:
可以通過將相關(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)求方法提供了別名。
注意
當(dāng)使用別名方法時(shí),不需要在config中指定url,method和data屬性。
??當(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主要的作用:
簡(jiǎn)單理解為:把計(jì)算的結(jié)果當(dāng)作屬性返回去
<!--引入 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>
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安裝依賴,如圖所示。
.
|-- 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.1 按定義描述直接生成
1.2 使用類型轉(zhuǎn)換str()生成
1.3 使用join方法連接列表元素
也就是遍歷字符串的全部字符,一邊遍歷一邊處理。
字符串的基礎(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 碼。
對(duì)象方法 | 符合返回“True”的情況 |
s.isupper() | s不空且其中所有存在大小寫的字符都是大寫 |
s.islower() | s不空且其中所有存在大小寫的字符都是小寫 |
s.isdigit() | s不空且其中所有字符都是數(shù)字 |
s.isalpha() | s不空且其中所有字符都是字母 |
s.isidentifier() | s不空且其形式可以作為標(biāo)識(shí)符 |
s.isspace() | s不空且其中全是空白字符(空格、制表符、換行符) |
對(duì)象方法 | 說明 |
s.lower() | 拷貝后大寫的字母變成小寫 |
s.upper() | 拷貝后小寫的字母變成大寫 |
s.capitalize() | 拷貝后首字符大小、其余小寫 |
s.swapcase() | 拷貝后大小寫調(diào)換 |
對(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.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用于指定連接使用的分隔符。
各種數(shù)值類型和字符串可以相互轉(zhuǎn)換:
字符串格式化是指適當(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字符,<表示居左,用字符<填充 |
需要在字符中使用特殊字符(如容器類對(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-
*請(qǐng)認(rèn)真填寫需求信息,我們會(huì)在24小時(shí)內(nèi)與您取得聯(lián)系。