預(yù)備知識: | 電腦基礎(chǔ)知識,了解基本的 HTML 和 CSS,了解JavaScript是什么。 |
---|---|
目標(biāo): | 熟悉JavaScript的變量使用 |
在本章中,你將要輸入一些代碼來測試你對相關(guān)內(nèi)容的理解。如果你是用的桌面瀏覽器,輸入這些代碼最好的地方是瀏覽器的JavaScript終端,(參考 What are browser developer tools?查看如何使用這些工具)。
當(dāng)然,我們也提供了一個簡單的JavaScript終端,嵌入在下文的頁面中,以便你更容易的輸入和測試這些代碼。
一個變量,就是一個用于存放數(shù)值的容器。這個數(shù)值可能是一個用于累加計算的數(shù)字,或者是一個句子中的字符串。變量的獨特之處在于它存放的數(shù)值是可以改變的。讓我們看一個簡單的例子:
<button>Press me</button>
var button = document.querySelector('button'); button.onclick = function() { var name = prompt('What is your name?'); alert('Hello ' + name + ', nice to see you!'); }
在上面的例子中,點擊按鈕之后,第一行代碼會在屏幕上彈出一個對話框,讓你輸入名字,然后存儲輸入的名字到一個變量。第二行代碼將會顯示包含你名字的歡迎信息,你的名字就是從之前的變量里面讀取的。
為了理解變量的作用,我們可以思考一下,如果不使用變量,我們實現(xiàn)上述功能的代碼將是這樣的:
var name = prompt('What is your name?'); if (name === 'Adam') { alert('Hello Adam, nice to see you!'); } else if (name === 'Alan') { alert('Hello Alan, nice to see you!'); } else if (name === 'Bella') { alert('Hello Bella, nice to see you!'); } else if (name === 'Bianca') { alert('Hello Bianca, nice to see you!'); } else if (name === 'Chris') { alert('Hello Chris, nice to see you!'); } // ... and so on ...
你可能暫時還沒有完全理解這些代碼和語法,但是你應(yīng)該能夠理解到 -- 如果我們沒有變量,我們就不得不寫大量的代碼去枚舉和檢查輸入的名字,然后去顯示它們。這樣做顯然是低效率和不可行的 -- 你沒有辦法列舉出所有可能的輸入。
變量的另一個特性就是它們能夠存儲任何的東西 -- 不只是字符串和數(shù)字。變量可以存儲更復(fù)雜的數(shù)據(jù),甚至是函數(shù)。你將在后續(xù)的內(nèi)容中體驗到這些用法。
我們說,變量是用來存儲數(shù)值的,那么有一個重要的概念需要區(qū)分。變量不是數(shù)值本身,它們僅僅是一個用于存儲數(shù)值的容器。你可以把變量想象成一個個用來裝東西的紙箱子。
要想使用變量,你需要做的第一步就是創(chuàng)建它 -- 更準(zhǔn)確的說,是聲明一個變量。聲明一個變量的語法是在var關(guān)鍵字之后加上這個變量的名字:
var myName; var myAge;
在這里我們聲明了兩個變量?myName
和 myAge
. 那么現(xiàn)在嘗試輸入這些代碼到你的瀏覽器終端或者下面提供的JavaScript終端?(你也可以在另一個獨立的標(biāo)簽頁或窗口 open this consol ). 此外,你也可以多聲明幾個變量.
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>JavaScript console</title> <style> * { box-sizing: border-box; } html { background-color: #0C323D; color: #809089; font-family: monospace; } body { max-width: 700px; } p { margin: 0; width: 1%; padding: 0 1%; font-size: 16px; line-height: 1.5; float: left; } .input p { margin-right: 1%; } .output p { width: 100%; } .input input { width: 96%; float: left; border: none; font-size: 16px; line-height: 1.5; font-family: monospace; padding: 0; background: #0C323D; color: #809089; } div { clear: both; } </style> </head> <body> </body> <script> var geval = eval; function createInput() { var inputDiv = document.createElement('div'); var inputPara = document.createElement('p'); var inputForm = document.createElement('input'); inputDiv.setAttribute('class','input'); inputPara.textContent = '>'; inputDiv.appendChild(inputPara); inputDiv.appendChild(inputForm); document.body.appendChild(inputDiv); inputForm.addEventListener('change', executeCode); } function executeCode(e) { try { var result = geval(e.target.value); } catch(e) { var result = 'error — ' + e.message; } var outputDiv = document.createElement('div'); var outputPara = document.createElement('p'); outputDiv.setAttribute('class','output'); outputPara.textContent = 'Result: ' + result; outputDiv.appendChild(outputPara); document.body.appendChild(outputDiv); e.target.disabled = true; e.target.parentNode.style.opacity = '0.5'; createInput() } createInput(); </script> </html>
提示: 在JavaScript中,所有代碼指令都會以分號結(jié)尾?(;
) — 如果忘記加分號,你的單行代碼可能執(zhí)行正常,但是在多行代碼在一起的時候就可能出錯。所以,最好是養(yǎng)成主動以分號作為代碼結(jié)尾的習(xí)慣。
你可以通過使用變量的方式來驗證這個變量的數(shù)值是否在執(zhí)行環(huán)境中已經(jīng)存在。例如,
myName; myAge;
以上這兩個變量并沒有數(shù)值,他們是空的容器。當(dāng)你使用他們時,你會得到一個undefined的值。如果他們并不存在的話,那你就會得到一個報錯信息。不信的話,可以嘗試使用下面的變量,
scoobyDoo;
提示: 千萬不要把兩個概念弄混淆了,"一個變量存在,但是沒有數(shù)值"和"一個變量并不存在"?— 他們完全是兩回事.
一旦你定義了一個變量,你就能夠初始化它. 方法如下,在變量名之后跟上一個"=",然后是數(shù)值:
myName = 'Chris'; myAge = 37;
嘗試回到控制臺現(xiàn)在,輸入這些行。 在每種情況下,您都應(yīng)該看到您分配給控制臺中返回的變量的值以進(jìn)行確認(rèn)。 同樣,您可以通過在控制臺中簡單輸入變量值來返回變量值 - 再次嘗試:
myName; myAge;
您可以同時聲明和初始化變量,如下所示:
var myName = 'Chris';
這可能是你大多數(shù)時候都會做的,因為它比在兩個單獨的行上執(zhí)行兩個動作更快。
注意:如果您編寫了一個聲明和初始化變量的多行JavaScript程序,您可以在初始化之后實際聲明它,它仍然可以工作。 這是因為變量聲明通常在執(zhí)行其余代碼之前先完成。 這稱為提升 - 請閱讀 var hoisting / a>有關(guān)主題的更多詳細(xì)信息。
一旦變量具有分配的值,您可以通過簡單地給它一個不同的值來更新該值。 嘗試在控制臺中輸入以下行:
myName = 'Bob'; myAge = 40;
你可以調(diào)用一個變量幾乎任何你喜歡,但有限制。 通常你應(yīng)該堅持只使用拉丁字符(0-9,a-z,A-Z)和下劃線字符。
myage
is a different variable to myAge
.var
, function
, let
, and for
as variable names. Browsers will recognize them as different code items, and so you'll get errors.注意:您可以在 #Keywords">詞法語法 - 關(guān)鍵字。
好名稱示例:
age myAge init initialColor finalOutputValue audio1 audio2
錯誤名稱示例:
1 a _12 myage MYAGE var Document skjfndskjfnbdskjfb thisisareallylongstupidvariablenameman
現(xiàn)在嘗試創(chuàng)建一些更多的變量,上面的指導(dǎo)。
有幾種不同類型的數(shù)據(jù)可以存儲在變量(數(shù)據(jù)類型)中。 在本節(jié)中,我們將簡要介紹這些,然后在以后的文章中,您將更詳細(xì)地了解它們。
到目前為止,我們已經(jīng)看過前兩個,但還有其他。
您可以在變量中存儲數(shù)字,例如30(也稱為整數(shù))或像2.456這樣的十進(jìn)制數(shù)字(也稱為浮點數(shù)或浮點數(shù))。 對于不同的數(shù)字類型,JavaScript沒有不同的數(shù)據(jù)類型,例如一些編程語言。 當(dāng)給一個變量一個數(shù)字值,你不包括引號:
var myAge = 17;
字符串是文本片段。 當(dāng)你給一個變量一個字符串值,你需要將它包裝在單引號或雙引號中,否則JavaScript將嘗試將它作為另一個變量名。
var dolphinGoodbye = 'So long and thanks for all the fish';
布爾值是true / false值 - 它們可以有兩個值, true
或 false
。 這些通常用于測試條件,之后適當(dāng)?shù)剡\行代碼。 例如,一個簡單的情況是:
var iAmAlive = true;
而在現(xiàn)實中,它將被更多地使用:
var test = 6 < 3;
這是使用"小于"運算符(<
)來測試6是否小于3.如你所料,它將返回 false
,因為6不是 小于3! 你將在課程中學(xué)到更多關(guān)于這樣的操作員。
數(shù)組是單個對象,包含用方括號括起來并用逗號分隔的多個值。 嘗試在控制臺中輸入以下行:
var myNameArray = ['Chris', 'Bob', 'Jim']; var myNumberArray = [10,15,40];
定義這些數(shù)組后,您可以使用如下所示的語法訪問它們各自的值。 嘗試這些行:
myNameArray[0]; // should return 'Chris' myNumberArray[2]; // should return 40
這里的方括號包含一個索引值,用于指定要返回的值的位置。 你可能已經(jīng)注意到,計算機從0計數(shù),而不是像我們?nèi)祟愐粯印?/span>
在將來的文章中,您將學(xué)到更多關(guān)于數(shù)組的內(nèi)容。
在編程中,對象是對現(xiàn)實生活對象進(jìn)行建模的代碼結(jié)構(gòu)。 你可以有一個簡單的對象代表一個停車場,并包含關(guān)于它的寬度和長度的信息,或者你可以有一個對象代表一個人,并包含關(guān)于他們的名字,身高,體重,他們說什么語言,如何說 你好,他們,等等。
嘗試在您的控制臺輸入以下行:
var dog = { name : 'Spot', breed : 'Dalmatian' };
要檢索存儲在對象中的信息,可以使用以下語法:
dog.name
我們現(xiàn)在不會再查看對象了 - 您可以在未來的模塊中了解更多信息。
JavaScript是一種"寬松類型語言",這意味著,與其他一些語言不同,您不需要指定變量將包含什么數(shù)據(jù)類型(例如number?string?)。
例如,如果你聲明一個變量并給它一個帶引號的值,那么瀏覽器就會知道它是一個字符串:
var myString = 'Hello';
它仍然是一個字符串,即使它包含數(shù)字,所以要小心:
var myNumber = '500'; // oops, this is still a string typeof(myNumber); myNumber = 500; // much better — now this is a number typeof(myNumber)
嘗試輸入上面的四行到控制臺一個一個,看看什么結(jié)果(不要輸入評論)。 你會注意到,我們使用一個特殊的函數(shù) typeof()
- 這會返回你傳遞給它的變量的數(shù)據(jù)類型。 第一次在上面的序列中調(diào)用它,它應(yīng)該返回 string
,因為在這一點 myNumber
變量包含一個字符串\'500\'
>。 看看,看看它返回的第二次你叫它。
現(xiàn)在,您應(yīng)該知道有關(guān)JavaScript變量的合理金額以及如何創(chuàng)建它們。 在下一篇文章中,我們將更詳細(xì)地討論數(shù)字,看看如何在JavaScript中做基本的數(shù)學(xué)。
更多建議: