JavaScript 快速指南

2018-09-28 18:04 更新

快速指南

JavaScript 是什么?

JavaScript 具有如下特征:

  • 輕量級(jí)的解釋型(代碼不需要經(jīng)過(guò)預(yù)編譯)可編程語(yǔ)言。
  • 用于網(wǎng)絡(luò)應(yīng)用開(kāi)發(fā)的腳本語(yǔ)言。
  • 可以與 Java、HTML 語(yǔ)言互補(bǔ)集成。
  • 開(kāi)放且跨平臺(tái)。

JavaScript 語(yǔ)法

一段 JavaScript 腳本由包含在網(wǎng)頁(yè)頁(yè)面中 <script>... </script> 標(biāo)簽內(nèi)的 JavaScript 語(yǔ)句組成。

編程人員可以隨意將由 <script> 標(biāo)簽包含著的 JavaScript 腳本置于網(wǎng)頁(yè)的任意位置,但是通常都會(huì)放在 <head> 標(biāo)簽內(nèi)。

<script> 標(biāo)記用來(lái)讓瀏覽器明白這個(gè)標(biāo)簽之間的語(yǔ)句需要作為腳本來(lái)解釋。所以,JavaScript 腳本可以簡(jiǎn)單的按照如下形勢(shì)來(lái)表示:

    <script ...>
      JavaScript code
    </script

<script> 標(biāo)簽有兩個(gè)很重要的屬性:

  • 語(yǔ)言(language):這個(gè)屬性指定你正在使用什么腳本語(yǔ)言。一般來(lái)說(shuō),指的都是 JavaScript。盡管最近版本的HTML(XHTML 及后續(xù)版本)會(huì)逐步不再使用這個(gè)屬性。
  • 類型(type): 該屬性用于表明腳本語(yǔ)言類別的。通常應(yīng)該設(shè)置為“text/javascript”。

所以 JavaScript 片段是如下形式:

    <script language="javascript" type="text/javascript">
      JavaScript code
    </script>

嘗試寫(xiě)第一個(gè) JavaScript 腳本

我們?cè)囍?JavaScript 腳本寫(xiě)一個(gè)打印 “Hello word” 的功能。

    <html>
    <body>
    <script language="javascript" type="text/javascript">
    <!--
       document.write("Hello World!")
    //-->
    </script>
    </body>
    </html>

上面的腳本會(huì)顯示如下結(jié)果:

    Hello World!

空格和換行符

JavaScript編譯器會(huì)忽略掉腳本中的所有空白、縮進(jìn)符、換行符。

因此,程序員可以在腳本中自用使用空格、縮進(jìn)和換行符,這樣程序員就可以隨意縮進(jìn)格式化程序格式,以便代碼更易于閱讀和理解。

分號(hào)是可選的

與 C、C++ 和 Java一樣,通常 JavaScript 語(yǔ)句以分號(hào)結(jié)尾。但是, JavaScript 允許在每行只有一句腳本的情況下省略分號(hào)。比如,下方的腳本就是可以省略分號(hào)的:

    <script language="javascript" type="text/javascript">
    <!--
      var1 = 10
      var2 = 20
    //-->
    </script

但是一行中存在多個(gè)腳本語(yǔ)句時(shí),分號(hào)是不能省略的,比如:

    <script language="javascript" type="text/javascript">
    <!--
      var1 = 10; var2 = 20;
    //-->
    </script>

注意:使用分號(hào)是一個(gè)比較實(shí)用的編程習(xí)慣

區(qū)分大小寫(xiě)

JavaScript是一門大小寫(xiě)敏感的語(yǔ)言。這意味著關(guān)鍵詞、變量、函數(shù)名及其他任何標(biāo)識(shí)符在輸入時(shí)都要保持一樣的書(shū)寫(xiě)格式。

所以,Time,TImeTIME 在 JavaScript 中表示不同的意思。

注意:在編寫(xiě)JavaScript腳本時(shí)一定要注意變量和函數(shù)名的書(shū)寫(xiě)。

注釋

JavaScript 同樣支持 C 和 C++ 那樣的注釋方式:

  • 任何以 “//” 開(kāi)頭的行均被認(rèn)為是注釋內(nèi)容而被編譯器忽略掉。
  • 任何以“/”開(kāi)頭且以“/” 結(jié)尾的內(nèi)容均被視為注釋內(nèi)容,且這樣的內(nèi)容可以是多行的。
  • JavaScript 也識(shí)別 HTML 格式的注釋開(kāi)始標(biāo)識(shí)"<!--"。它視該方式為單行注釋方式,和//一樣的效果。
  • HTML 注釋結(jié)尾符“-->”不會(huì)被JavaScript識(shí)別,應(yīng)該書(shū)寫(xiě)成“//-->”。

JavaScript腳本應(yīng)置于HTML文件的何處

在 HTML 文件中何處書(shū)寫(xiě) JavaScript 腳本是非常靈活的。但是,通常情況下都會(huì)將腳本書(shū)寫(xiě)在 HTML 文件中的如下位置內(nèi):

  • <head>...</head>內(nèi)
  • <body>...</body>內(nèi)
  • <body>...</body><head>...</head>同時(shí)書(shū)寫(xiě)
  • 以外部文件的方式包含在<head>...</head>內(nèi)

數(shù)據(jù)類型

JavaScript中可以市容下述三種數(shù)據(jù)類型:

  • 數(shù)值類型:比如123,120.50等
  • 字符串類型:比如“This text string”
  • 布爾類型:比如true or false

JavaScript也支持另外兩個(gè)常用類型:null和undefined,這兩個(gè)類型均僅限定一個(gè)單一的值。

JavaScript變量

和其他可編程語(yǔ)言相同,JavaScript也有“變量”的概念?!白兞俊笨梢哉J(rèn)為是有名字的容器。你可以將數(shù)據(jù)置于這些容器中,然后通過(guò)容器的名稱就可以知道數(shù)據(jù)的類型。
值得注意的是,在JavaScript編程過(guò)程中,必須先聲明一個(gè)變量,這個(gè)變量才能被使用。
此外,變量是通過(guò)“var”來(lái)聲明的,例子如下:

    <script type="text/javascript">
    <!--
    var money;
    var name;
    //-->
    </script>

JavaScript變量作用域

一個(gè)變量的作用域就是該變量定義后在程序中的作用范圍。JavaScript變量有兩個(gè)變量作用域。

  1. 全局變量:全局變量具有全部整體范圍的作用域,這意味著它可以再JavaScript代碼任何地方定義。
  2. 局部變量:局部變量?jī)H在定義它的函數(shù)體內(nèi)可以訪問(wèn)到。函數(shù)參數(shù)對(duì)于函數(shù)來(lái)說(shuō)就是局部變量。

JavaScript變量名稱

JavaScript中變量的命名規(guī)則如下:

  • 不能使用JavaScript中的保留關(guān)鍵字來(lái)命名變量。這些保留關(guān)鍵字會(huì)在下一節(jié)中介紹。比如break 或 boolean,這些命名變量是無(wú)效的。
  • JavaScript變量名稱不能以數(shù)字(0-9)開(kāi)頭,只能以字母或下劃線來(lái)命名變量。比如123test就是無(wú)效的變量名。但是,_123就是有效的變量名。
  • JavaScript變量名稱對(duì)大小寫(xiě)敏感。比如,Name和name是兩個(gè)不同的變量。

JavaScript保留的關(guān)鍵字

下面是JavaScript中的保留關(guān)鍵字。他們不能用來(lái)命名JavaScript中的變量、行數(shù)、方法、循環(huán)標(biāo)簽或任何對(duì)象名稱。

abstract else instanceof switch
boolean enum int synchronized
break export interface this
byte extends long throw
case FALSE native throws
catch final new transient
char finally null TRUE
class float package try
const for private typeof
continue function protected var
debugger goto public void
default if return volatile
delete implements short while
do import static with
double in super  

算數(shù)運(yùn)算符

JavaScript語(yǔ)言支持以下算術(shù)運(yùn)算符

給定 A=10,B=20,下面的表格解釋了這些算術(shù)運(yùn)算符:

運(yùn)算符 描述 例子
+兩個(gè)運(yùn)算數(shù)相加A + B = 30
-第一個(gè)運(yùn)算數(shù)減去第二個(gè)運(yùn)算數(shù)A - B = -10
*運(yùn)算數(shù)相乘A * B = 200
/分子除以分母B / A = 2
%模數(shù)運(yùn)算符,整除后的余數(shù)B % A = 0
++增量運(yùn)算符,整數(shù)值逐次加1A++ = 11
--減量運(yùn)算符,整數(shù)值逐次減1A-- = 9

比較運(yùn)算符

JavaScript語(yǔ)言支持以下比較運(yùn)算符

給定 A=10,B=20,下面的表格解釋了這些比較運(yùn)算符:

運(yùn)算符描述例子
== 檢查兩個(gè)運(yùn)算數(shù)的值是否相等,如果是,則結(jié)果為true A == B 為false
!= 檢查兩個(gè)運(yùn)算數(shù)的值是否相等,如果不相等,則結(jié)果為trueA != B 為true
> 檢查左邊運(yùn)算數(shù)是否大于右邊運(yùn)算數(shù),如果是,則結(jié)果為trueA > B 為false
<檢查左邊運(yùn)算數(shù)是否小于右邊運(yùn)算數(shù),如果是,則結(jié)果為trueA < B 為true
>= 檢查左邊運(yùn)算數(shù)是否大于或者等于右邊運(yùn)算數(shù),如果是,則結(jié)果為true A >= B 為false
<=檢查左邊運(yùn)算數(shù)是否小于或者等于運(yùn)算數(shù),如果是,則結(jié)果為true A <= B 為true

邏輯運(yùn)算符

JavaScript語(yǔ)言支持以下邏輯運(yùn)算符

給定 A=10,B=20,下面的表格解釋了這些邏輯運(yùn)算符

運(yùn)算符 描述 例子
&&稱為邏輯與運(yùn)算符。如果兩個(gè)運(yùn)算數(shù)都非零,則結(jié)果為true。A && B 為true
||稱為邏輯或運(yùn)算符。如果兩個(gè)運(yùn)算數(shù)中任何一個(gè)非零,則結(jié)果為true。A || B 為 true
!稱為邏輯非運(yùn)算符。用于改變運(yùn)算數(shù)的邏輯狀態(tài)。如果邏輯狀態(tài)為true,則通過(guò)邏輯非運(yùn)算符可以使邏輯狀態(tài)變?yōu)閒alse!(A && B) 為false

按位運(yùn)算符

JavaScript語(yǔ)言支持以下邏輯運(yùn)算符

給定 A=2,B=3,下面的表格解釋了這些邏輯運(yùn)算符

運(yùn)算符描述 例子
&稱為按位與運(yùn)算符。它對(duì)整型參數(shù)的每一個(gè)二進(jìn)制位進(jìn)行布爾與操作。A & B = 2 .
|稱為按位或運(yùn)算符。它對(duì)整型參數(shù)的每一個(gè)二進(jìn)制位進(jìn)行布爾或操作。A | B = 3.
^ 稱為按位異或運(yùn)算符。它對(duì)整型參數(shù)的每一個(gè)二進(jìn)制位進(jìn)行布爾異或操作。異或運(yùn)算是指第一個(gè)參數(shù)或者第二個(gè)參數(shù)為true,并且不包括兩個(gè)參數(shù)都為true的情況,則結(jié)果為true。(A ^ B) = 1.
~ 稱為按位非運(yùn)算符。它是一個(gè)單運(yùn)算符,對(duì)運(yùn)算數(shù)的所有二進(jìn)制位進(jìn)行取反操作。~B = -4 .
<<稱為按位左移運(yùn)算符。它把第一個(gè)運(yùn)算數(shù)的所有二進(jìn)制位向左移動(dòng)第二個(gè)運(yùn)算數(shù)指定的位數(shù),而新的二進(jìn)制位補(bǔ)0。將一個(gè)數(shù)向左移動(dòng)一個(gè)二進(jìn)制位相當(dāng)于將該數(shù)乘以2,向左移動(dòng)兩個(gè)二進(jìn)制位相當(dāng)于將該數(shù)乘以4,以此類推。 A << 1 = 4.
>>稱為按位右移運(yùn)算符。它把第一個(gè)運(yùn)算數(shù)的所有二進(jìn)制位向右移動(dòng)第二個(gè)運(yùn)算數(shù)指定的位數(shù)。為了保持運(yùn)算結(jié)果的符號(hào)不變,左邊二進(jìn)制位補(bǔ)0或1取決于原參數(shù)的符號(hào)位。如果第一個(gè)運(yùn)算數(shù)是正的,運(yùn)算結(jié)果最高位補(bǔ)0;如果第一個(gè)運(yùn)算數(shù)是負(fù)的,運(yùn)算結(jié)果最高位補(bǔ)1。將一個(gè)數(shù)向右移動(dòng)一位相當(dāng)于將該數(shù)乘以2,向右移動(dòng)兩位相當(dāng)于將該數(shù)乘以4,以此類推。 A >> 1 = 1.
>>>稱為0補(bǔ)最高位無(wú)符號(hào)右移運(yùn)算符。這個(gè)運(yùn)算符與>>運(yùn)算符相像,除了位移后左邊總是補(bǔ)0.A >>> = 1.

賦值運(yùn)算符

JavaScript語(yǔ)言支持以下賦值運(yùn)算符

運(yùn)算符 描述例子
=簡(jiǎn)單賦值運(yùn)算符,將右邊運(yùn)算數(shù)的值賦給左邊運(yùn)算數(shù) C = A + B 將A+B的值賦給C
+=加等賦值運(yùn)算符,將右邊運(yùn)算符與左邊運(yùn)算符相加并將運(yùn)算結(jié)果賦給左邊運(yùn)算數(shù)C += A 相當(dāng)于 C = C + A
-=減等賦值運(yùn)算符,將左邊運(yùn)算數(shù)減去右邊運(yùn)算數(shù)并將運(yùn)算結(jié)果賦給左邊運(yùn)算數(shù)C -= A 相當(dāng)于C = C - A
*=乘等賦值運(yùn)算符,將右邊運(yùn)算數(shù)乘以左邊運(yùn)算數(shù)并將運(yùn)算結(jié)果賦給左邊運(yùn)算數(shù)C *= A 相當(dāng)于C = C * A
/= 除等賦值運(yùn)算符, 將左邊運(yùn)算數(shù)除以右邊運(yùn)算數(shù)并將運(yùn)算結(jié)果賦值給左邊運(yùn)算數(shù)C /= A 相當(dāng)于 C = C / A
%=模等賦值運(yùn)算符,用兩個(gè)運(yùn)算數(shù)做取模運(yùn)算并將運(yùn)算結(jié)果賦值給左邊運(yùn)算數(shù)C %= A 相當(dāng)于 C = C % A

其他運(yùn)算符

條件運(yùn)算符

有一種運(yùn)算符叫條件運(yùn)算符。首先判斷一個(gè)表達(dá)式是真或假,然后根據(jù)判斷結(jié)果執(zhí)行兩個(gè)給定指令中的一個(gè)。條件運(yùn)算符語(yǔ)法如下

運(yùn)算符 描述例子
? :條件表達(dá)式如果條件為真 ? X值 : Y值

typeof 運(yùn)算符

typeof 是一個(gè)置于單個(gè)參數(shù)之前的一元運(yùn)算符,這個(gè)參數(shù)可以是任何類型的。它的值是一個(gè)表示運(yùn)算數(shù)的類型的字符串。

typeof 運(yùn)算符可以判斷“數(shù)值”,“字符串”,“布爾”類型,看運(yùn)算數(shù)是一個(gè)數(shù)字,字符串還是布爾值,并且根據(jù)判斷結(jié)果返回true或者false。

if 語(yǔ)句

if語(yǔ)句是基本的控制語(yǔ)句,能使JavaScript做出決定并且按條件執(zhí)行語(yǔ)句。

    if (expression){
       Statement(s) to be executed if expression is true
    }

if...else 語(yǔ)句

if...else 語(yǔ)句是另一種控制語(yǔ)句,它能使JavaScript選擇多個(gè)代碼塊之一來(lái)執(zhí)行。

    if (expression){
       Statement(s) to be executed if expression is true
    }else{
       Statement(s) to be executed if expression is false
    }

if...else if... 語(yǔ)句

if...else if... 語(yǔ)句是一種推進(jìn)形式的控制語(yǔ)句,它能使 JavaScript 選擇多個(gè)代碼塊之一來(lái)執(zhí)行。

     if (expression 1){
       Statement(s) to be executed if expression 1 is true
    }else if (expression 2){
       Statement(s) to be executed if expression 2 is true
    }else if (expression 3){
       Statement(s) to be executed if expression 3 is true
    }else{
       Statement(s) to be executed if no expression is true
    }

switch-case 語(yǔ)句

語(yǔ)句的基本語(yǔ)法是給定一個(gè)判斷表達(dá)式以及若干不同語(yǔ)句,根據(jù)表達(dá)式的值來(lái)執(zhí)行這些語(yǔ)句。編譯器檢查每個(gè)case是否與表達(dá)式的值相匹配。如果沒(méi)有與值相匹配的,則執(zhí)行default缺省條件。

    switch (expression)
    {
      case condition 1: statement(s)
    break;
      case condition 2: statement(s)
    break;
       ...
      case condition n: statement(s)
    break;
      default: statement(s)
    }  

while 循環(huán)

循環(huán)是 JavaScript 中最基本的循環(huán)模式,下邊將加以介紹。

    while(expression){  
    statement  
    }  

do-while 循環(huán)語(yǔ)句

do...while 循環(huán)和 while 循環(huán)非常相似,它們之間的區(qū)別是 while 語(yǔ)句為先判斷條件是否成立在執(zhí)行循環(huán)體,而 do...while 循環(huán)語(yǔ)句則先執(zhí)行一次循環(huán)后,再判斷條件是否成立。也就是說(shuō)即使判斷條件不成立,do...while 循環(huán)語(yǔ)句中“{}”中的程序段至少要被執(zhí)行一次。

    do{  
    statement  
    }while(expression);  

for 循環(huán)

循環(huán)是一種最簡(jiǎn)潔的循環(huán)模式,包括三個(gè)重要部分

  • initialize :初始化表達(dá)式,初始化計(jì)數(shù)器一個(gè)初始值,在循環(huán)開(kāi)始前計(jì)算初始狀態(tài)。
  • test condition :判斷條件表達(dá)式,判斷給定的狀態(tài)是否為真。如果條件為真,則執(zhí)行循環(huán)體“{}”中的代碼,否則跳出循環(huán)。
  • iteration statement :循環(huán)操作表達(dá)式,改變循環(huán)條件,修改計(jì)數(shù)器的值。

可以將這三個(gè)部分放在同一行,用分號(hào)隔開(kāi)。

    for(initialize;test condition;iteration statement)  
    {  
        statement;  
    }

for in 語(yǔ)句

    for (variablename in object){  
        statement
    }    

在每次迭代中將一個(gè)對(duì)象的屬性賦值給變量,這個(gè)循環(huán)會(huì)持續(xù)到這個(gè)對(duì)象的所有屬性都枚舉完。

break 語(yǔ)句

Break語(yǔ)句用于提前跳出循環(huán),打破封閉的循環(huán)體。

continue 語(yǔ)句

Continue語(yǔ)句告訴解釋器立即開(kāi)始下一次迭代的循環(huán)和跳過(guò)剩余的代碼塊。

當(dāng)遇到continue語(yǔ)句,程序流將立即循環(huán)檢查表達(dá)式,如果條件保持真那么下個(gè)迭代開(kāi)始,否則控制跳出循環(huán)體。

函數(shù)定義

使用一個(gè)函數(shù)之前,我們需要定義該函數(shù)。在 JavaScript 中最常見(jiàn)的定義一個(gè)函數(shù)的方式是使用函數(shù)關(guān)鍵字,緊隨其后的是一個(gè)獨(dú)特的函數(shù)名,參數(shù)列表(也可能是空的),和一個(gè)被花括號(hào)包圍的語(yǔ)句塊。這里顯示的基本語(yǔ)法

    <script type="text/javascript">
    <!--
    function functionname(parameter-list)
    {
      statements
    }
    //-->
    </script>

調(diào)用函數(shù)

在腳本中調(diào)用某個(gè)函數(shù)之后,你會(huì)需要簡(jiǎn)單的編寫(xiě)的函數(shù)的名稱如下

    <script type="text/javascript">

    <!--
    sayHello();
    //-->
    </script>

異常處理

異常通常使用 try/catch/finally 結(jié)構(gòu)來(lái)進(jìn)行處理。

    <script type="text/javascript">
    <!--
    try {
       statementsToTry
    } catch ( e ) {
      catchStatements
    } finally {
      finallyStatements
    }
    //-->
    </script>

try部分后面必須緊隨catch后者finally部分(同時(shí)或者其一)。當(dāng)在catch部分中發(fā)生異常事件后,異常會(huì)被存儲(chǔ)于e變量中,然后catch部分會(huì)被執(zhí)行。而finally部分會(huì)在try/catch之后必然執(zhí)行。

警告對(duì)話框

警告對(duì)話框是最常用的,它通常被用來(lái)給用戶提示一些警告信息。比如,某個(gè)輸入?yún)^(qū)域需要用戶輸入一些文本信息,但是用戶并沒(méi)有輸入任何信息,那么為了使用戶輸入有效的信息,你可以利用警告對(duì)話框來(lái)提示警告信息,如下:

    <head>
    <script type="text/javascript">
    <!--
       alert("Warning Message");
    //-->

    </script>
    </head>

確認(rèn)對(duì)話框

確認(rèn)對(duì)話框是最常用來(lái)獲取用戶對(duì)任何選項(xiàng)的贊成的觀點(diǎn)。確認(rèn)對(duì)話框會(huì)顯示兩個(gè)按鈕:OkCancel
你可以像如下的方式使用確認(rèn)對(duì)話框:

    <head>
    <script type="text/javascript">
    <!--
       var retVal = confirm("Do you want to continue ?");
       if( retVal == true ){
      alert("User wants to continue!");
          return true;
       }else{
      alert("User does not want to continue!");
          return false;
       }
    //-->
    </script>
    </head>

提示對(duì)話框

你可以使用如下的方式來(lái)實(shí)現(xiàn)提示對(duì)話框

    <head>
    <script type="text/javascript">
    <!--
       var retVal = prompt("Enter your name : ", "your name here");
       alert("You have entered : " +  retVal );
    //-->
    </script>
    </head>

頁(yè)面重定向

利用 JavaScript 在客戶端進(jìn)行重定向是非常簡(jiǎn)單的。為了重定向你的網(wǎng)站,你僅僅只需要在網(wǎng)頁(yè)代碼的頭部中添加一行代碼,如下

    <head>
    <script type="text/javascript">
    <!--
       var retVal = prompt("Enter your name : ", "your name here");
       alert("You have entered : " +  retVal );
    //-->
    </script>
    </head>

Void關(guān)鍵字

JavaScript 中 void 是一個(gè)重要的關(guān)鍵字。它可以用作一個(gè)一元運(yùn)算符,此時(shí)它會(huì)出現(xiàn)在一個(gè)操作數(shù)之前,這個(gè)操作數(shù)可以是任意類型的。
這個(gè)操作符指定要計(jì)算一個(gè)表達(dá)式但是不返回值。它的語(yǔ)法可能是下列之一

    <head>
    <script type="text/javascript">
    <!--
    void func()
    javascript:void func()

    or:

    void(func())
    javascript:void(func())
    //-->
    </script>
    </head>

頁(yè)面打印

JavaScript 能使用 window 對(duì)象的打印函數(shù)print來(lái)幫你實(shí)現(xiàn)這個(gè)功能。

當(dāng)JavaScript的打印方法 window.print() 執(zhí)行后,就會(huì)打印當(dāng)前的 web 頁(yè)面。

你可以使用 onclick 事件直接調(diào)用這個(gè)函數(shù),如下所示

    <head>
    <script type="text/javascript">
    <!--
    //-->
    </script>
    </head>
    <body>
    <form>
    <input type="button" value="Print" onclick="window.print()" />
    </form>
    </body>

Cookies 的存儲(chǔ)

創(chuàng)建 Cookie 最簡(jiǎn)單的方式就是給 document.cookie 對(duì)象賦值一個(gè)字符串值,它的語(yǔ)法如下

    document.cookie = "key1=value;key2=value2;expires=date";

Cookies的讀取

讀取 Cookie 就像寫(xiě)它一樣簡(jiǎn)單,因?yàn)?document.cookie 對(duì)象的值就是 Cookie 的屬性值。因此你可以利用這個(gè)字符串在任何時(shí)候?qū)?Cookie 進(jìn)行訪問(wèn)。

document.cookie 字符串會(huì)保存一系列用分號(hào)分開(kāi)的 name = value 鍵值對(duì),這里的 name 就是一個(gè) Cookie 名稱,value 是它的值。

以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)