斌斌學院任務一(JavaScript入門)

JavaScript ( **JS **) 是一種輕量級解釋型的循榆,或是JIT編譯型的程序設計語言,有著 函數(shù)優(yōu)先 (First-class Function) 的編程語言查刻。雖然它是作為開發(fā)web頁面的腳本語言而出名的键兜,但是在很多非瀏覽器環(huán)境中也使用JavaScript,例如 node.jsApache CouchDB赖阻。JS是一種基于原型蝶押、多范式的動態(tài)腳本語言,并且支持面向?qū)ο蠡鹋贰⒚钍胶吐暶魇剑ㄈ纾汉瘮?shù)式編程)編程風格棋电。了解更多 關于JavaScript茎截。

1.什么是JavaScript?
JavaScript(縮寫:JS)是一門成熟的動態(tài)編程語言赶盔,應用于HTML文檔是能夠在網(wǎng)站上提供動態(tài)交互能力企锌。

提示:我們將<script>元素放在 HTML 文件底部的原因是,瀏覽器解析 HTML 似乎按照代碼出現(xiàn)的順序來的于未。如果 JavaScript被首先讀取撕攒,它也應該影響下面的 HTML,但有時會出現(xiàn)問題烘浦,因為 JavaScript 會在 HTML 之前被加載抖坪,如果 JavaScript 代碼出現(xiàn)問題則 HTML 不會被加載。所以將 JavaScript 代碼放在底部是最好的選擇闷叉。

2.語言基礎速覽

變量(Variables)
Variables 是你存儲數(shù)據(jù)的容器擦俐。要聲明一個變量你需要使用關鍵字 var
,然后輸入任何你想要的名稱:

var myVariable;

提示:行末的分號表示語句結(jié)束握侧,不過這個分號不是必須的蚯瞧。只有在下一行語句以 (、[品擎、/埋合、+、-萄传、` 開頭時甚颂,你才需要加這個分號。

提示:你幾乎可以以任何名稱來命名一個變量盲再,不過我們有一些限制(點擊這里查看 變量命名規(guī)則 西设。) 如果你不確定,你可以 驗證你的變量名查看是否有效.

提示:JavaScript 是對大小寫敏感的——myVariable 與 myvariable 是不同的。如果你的代碼出現(xiàn)問題了答朋,查看一下大小寫有沒有錯誤贷揽!

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

那么為什么我們需要變量呢?好吧梦碗,在編程時要做任何有趣的事我們必須用到變量禽绪。如果值沒有改變,那么你將無法動態(tài)地做任何事洪规,就像個性化一個祝福短信或是改變在圖片庫里展示的圖片印屁。

注釋

你可以在 JavaScript 中添加注釋,就像你在 CSS 中做過的一樣斩例。

/*
Everything in between is a comment.
*/
// This is a comment

運算符
Operator 運算符是一個根據(jù)兩個值(或變量)做出結(jié)果的代數(shù)符號雄人。在下面的表里你可以看到一些最簡單的運算符,后面的示例你可以在瀏覽器控制臺里嘗試一下。


提示:計算時如果混合幾種數(shù)據(jù)類型可能導致奇怪的結(jié)果础钠,所以請謹慎地正確地引用你的變量恰力,然后得出你期望的結(jié)果。比如輸入 "35" + "25" 到控制臺旗吁。為什么結(jié)果與你想象的不同踩萎?因為引號將數(shù)字轉(zhuǎn)換成了字符串,所以最終會連接兩個字符串而不是相加數(shù)字很钓。如果你輸入 35 + 25香府,你會得到正確的結(jié)果。

語句

語句是能夠讓你測試一個表達式是否返回 true 然后根據(jù)結(jié)果運行不同的代碼的結(jié)構码倦。最常用的語句形式是 if ... else. 下面是一個例子:

var iceCream = 'chocolate';
if (iceCream === 'chocolate') {
  alert('Yay, I love chocolate ice cream!');    
} else {
  alert('Awwww, but chocolate is my favorite...');    
}

函數(shù)

Functions 是一種封裝你想重復使用的功能的方法企孩,這樣你就可以在任何時候想使用其中的功能就通過函數(shù)名稱來調(diào)用而不用老是重復寫下整段代碼。你在上面已經(jīng)見過一些函數(shù)了叹洲,比如:

var myVariable = document.querySelector('h1');

alert('hello!');

這些函數(shù)是瀏覽器內(nèi)置的柠硕,你可以在任何時候使用。

如果你看到一些東西長得像變量名但是有括號 — () — 在后面运提,這可能就是一個函數(shù)。函數(shù)通常包括 arguments — 一些必要的參數(shù)闻葵。它們在括號內(nèi)部, 如果有一個以上參數(shù)則使用逗號分開民泵。

好消息是你可以定義你自己的函數(shù) — 在下一個例子里我們會寫一個簡單的需要兩個參數(shù)來做乘法運算的函數(shù)。

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

提示:
return 語句告訴瀏覽器返回 result 變量以便使用槽畔。這是很有必要的栈妆,因為函數(shù)內(nèi)定義的變量只能在函數(shù)內(nèi)使用。這叫做作用域 scoping (詳見 變量作用域)

事件

在網(wǎng)頁上創(chuàng)建真正的交互厢钧,你需要使用事件 — 事件是能夠捕捉瀏覽器操作并且允許你運行代碼進行響應的代碼結(jié)構. 最明顯的事件是 點擊事件鳞尔,在鼠標點擊什么的時候被瀏覽器喚醒。 為了演示這個操作早直,嘗試將下面的代碼輸入到控制臺寥假,然后在當前頁面點擊:

document.querySelector('html').onclick = function() {
    alert('Ouch! Stop poking me!');
}

我們有許多方法來將一個事件與元素綁定。在這里我們選擇了 HTML 元素然后將 onclick 屬性設置成包含單擊時我們想要運行的代碼的匿名函數(shù)霞扬。

3.改善示例網(wǎng)頁

現(xiàn)在我們已經(jīng)講述了一點 JavaScript 的基礎了糕韧,讓我們添加一些更酷的特性到示例網(wǎng)頁里來看看我們能做什么。

添加一個圖像轉(zhuǎn)換器

這一部分我們將添加另一個圖片到我們的站點喻圃,并且添加簡單的 JavaScript 使得單擊圖片時轉(zhuǎn)換圖片萤彩。

var myImage = document.querySelector('img');

myImage.onclick = function() {
    var mySrc = myImage.getAttribute('src');
    if(mySrc === 'images/firefox-icon.png') {
      myImage.setAttribute ('src','images/firefox2.png');
    } else {
      myImage.setAttribute ('src','images/firefox-icon.png');
    }
}

4.添加個性化的歡迎信息

接下來我們會添加另一段代碼,在用戶初次進入站點時將網(wǎng)頁的標題改成一段個性化的歡迎信息斧拍。歡迎信息會持續(xù)到用戶離開網(wǎng)頁雀扶。我們還會添加一個選項來在必要的時候改變用戶并且改變歡迎信息。

<button>Change user</button>

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

function setUserName() {
  var myName = prompt('Please enter your name.');
  localStorage.setItem('name', myName);
  myHeading.innerHTML = 'Mozilla is cool, ' + myName;
}

if(!localStorage.getItem('name')) {
  setUserName();
} else {
  var storedName = localStorage.getItem('name');
  myHeading.innerHTML = 'Mozilla is cool, ' + storedName;
}

myButton.onclick = function() {
  setUserName();
}

現(xiàn)在當你第一次訪問網(wǎng)頁是肆汹,它將詢問你的用戶名然后向你發(fā)出一段有個性的信息愚墓。你可以在任何時候通過點擊按鈕來改變 name 予权。告訴你一個額外的福利,因為 name 是存放在 localStorage 里的转绷,它會持續(xù)到網(wǎng)站關閉伟件,所以這段個性化的信息在你重新打開瀏覽器時將仍然在這!

5.JavaScript 在你的頁面上做什么议经?

在這我們會開始確實地查看一些代碼斧账,而在這樣做的同時,探索當你在你的頁面上運行 JavaScript 的時候?qū)嶋H發(fā)生了什么煞肾。

讓我們簡單地回顧當你在瀏覽器中讀取一個網(wǎng)頁時發(fā)生什么(在文章 How CSS works 中第一次談及到)咧织。 當你在瀏覽器中讀取一個網(wǎng)頁,你在一個實行環(huán)境(瀏覽器標簽)中運行你的代碼(HTML, CSS 和 JavaScript)籍救。這就像是一個工廠习绢,獲取原材料(代碼)然后出產(chǎn)一個產(chǎn)品(網(wǎng)頁)。

在 HTML 和 CSS 已經(jīng)被集合和組裝成一個網(wǎng)頁后蝙昙,瀏覽器的 JavaScript 引擎執(zhí)行 JavaScript闪萄。這保證了當 JavaScript 開始運行時,網(wǎng)頁的結(jié)構和樣式已經(jīng)在該出現(xiàn)的地方了奇颠。

這是一個好事情败去,正如 JavaScript 的普遍用處是通過 DOM API(如之前提及的那樣)動態(tài)地修改 HTML 和 CSS 來更新用戶交界面。如果 JavaScript 在 HTML 和 CSS 組裝成一個瀏覽器之前加載運行烈拒,那么會發(fā)生錯誤圆裕。

6.JavaScript 運行順序

當瀏覽器遇到一塊 JavaScript 代碼時,它通常會按順序運行這代碼塊荆几,從上往下吓妆。這意味著你需要注意你放置代碼的順序。舉個例子吨铸,讓我們回到我們在第一個例子中看到的 JavaScript 代碼塊:

var para = document.querySelector('p');

para.addEventListener('click', updateName);

function updateName() {
  var name = prompt('Enter a new name');
  para.textContent = 'Player 1: ' + name;
}

在這里我們正選定一個文本段落 (line 1)行拢,然后給它附上一個事件監(jiān)聽器 (line 3) 使得當這個段落被點擊時,updateName() 代碼塊 (lines 5–8) 會被運行焊傅。updateName() 代碼塊(這類可以重復使用的代碼塊被稱為“函數(shù)”)向用戶請求一個新的名字剂陡,然后把這個名字插入到段落中以更新顯示。

如果你互換了代碼里最初兩行的順序狐胎,它將不會工作——取而代之的是鸭栖,你會在瀏覽器的開發(fā)者控制臺中得到一個錯誤——TypeError: para is undefined [類型錯誤:para沒有被定義]。這意味著 para 對象還不存在握巢,所以我們不能為它增添一個事件監(jiān)聽器晕鹊。

7.Playing with browser objects

Let's play with some browser objects a bit.

First of all open your program up in a browser.

Next, open your browser developer tools, and make sure the JavaScript console tab is open.

Type in a Objectname and the console will show you that the variable contains an element. You'll also notice that the console autocompletes object names that exist inside the execution environment, including your variables!

Now type in the following: Objectname.value = 'Hello';

The value property represents the current value entered into the text field. You'll see that by entering this command, we've changed what that is!

Now try typing in another Objectname and pressing return. The console will show you that the variable contains element.

Now try entering the following line: anotherObjectname.value

The browser will return undefined, because value doesn't exist on paragraphs.

To change the text inside a paragraph, you need the [textContent
](https://developer.mozilla.org/zh CN/docs/Web/API/Node/textContent) property instead. Try this:anotherObjectname.textContent = 'Where is my paragraph?';

Now for some fun stuff. Try entering the below lines, one by one: Objectname.style.backgroundColor = 'yellow';Objectname.style.fontSize = '200%';Objectname.style.padding = '10px';Objectname.style.boxShadow = '3px 3px 6px black';

頁面上的每個元素都有一個style屬性,它本身包含一個對象,其屬性包含應用于該元素的所有內(nèi)聯(lián)CSS樣式溅话。 這允許我們使用JavaScript在元素上動態(tài)設置新的CSS樣式晓锻。

最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市飞几,隨后出現(xiàn)的幾起案子砚哆,更是在濱河造成了極大的恐慌,老刑警劉巖屑墨,帶你破解...
    沈念sama閱讀 216,544評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件躁锁,死亡現(xiàn)場離奇詭異,居然都是意外死亡卵史,警方通過查閱死者的電腦和手機战转,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,430評論 3 392
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來以躯,“玉大人槐秧,你說我怎么就攤上這事∮巧瑁” “怎么了刁标?”我有些...
    開封第一講書人閱讀 162,764評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長址晕。 經(jīng)常有香客問我命雀,道長,這世上最難降的妖魔是什么斩箫? 我笑而不...
    開封第一講書人閱讀 58,193評論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮撵儿,結(jié)果婚禮上乘客,老公的妹妹穿的比我還像新娘。我一直安慰自己淀歇,他們只是感情好易核,可當我...
    茶點故事閱讀 67,216評論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著浪默,像睡著了一般牡直。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上纳决,一...
    開封第一講書人閱讀 51,182評論 1 299
  • 那天碰逸,我揣著相機與錄音,去河邊找鬼阔加。 笑死饵史,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播胳喷,決...
    沈念sama閱讀 40,063評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼湃番,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了吭露?” 一聲冷哼從身側(cè)響起吠撮,我...
    開封第一講書人閱讀 38,917評論 0 274
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎讲竿,沒想到半個月后泥兰,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,329評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡戴卜,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,543評論 2 332
  • 正文 我和宋清朗相戀三年逾条,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片投剥。...
    茶點故事閱讀 39,722評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡师脂,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出江锨,到底是詐尸還是另有隱情吃警,我是刑警寧澤,帶...
    沈念sama閱讀 35,425評論 5 343
  • 正文 年R本政府宣布啄育,位于F島的核電站酌心,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏挑豌。R本人自食惡果不足惜安券,卻給世界環(huán)境...
    茶點故事閱讀 41,019評論 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望氓英。 院中可真熱鬧侯勉,春花似錦、人聲如沸铝阐。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,671評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽徘键。三九已至练对,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間吹害,已是汗流浹背螟凭。 一陣腳步聲響...
    開封第一講書人閱讀 32,825評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留赠制,地道東北人赂摆。 一個月前我還...
    沈念sama閱讀 47,729評論 2 368
  • 正文 我出身青樓挟憔,卻偏偏與公主長得像,于是被迫代替她去往敵國和親烟号。 傳聞我的和親對象是個殘疾皇子绊谭,可洞房花燭夜當晚...
    茶點故事閱讀 44,614評論 2 353

推薦閱讀更多精彩內(nèi)容

  • 一、JS前言 (1)認識JS 也許你已經(jīng)了解HTML標記(也稱為結(jié)構)汪拥,知道了CSS樣式(也稱為表示)达传,會使用HT...
    凜0_0閱讀 2,769評論 0 8
  • 我想去流浪 乘著月光 輕快的,像 歌聲一樣 我想去流浪 不用背行囊 張開雙手當作翅膀 下一站迫筑,遠方 我想去流浪 把...
    蒼藍星球閱讀 212評論 1 3
  • 天地玄黃脯燃,宇宙洪荒搂妻,日月盈昃,辰宿列張辕棚。 自然萬物欲主,你能左右得了什么?活了幾十載逝嚎,又欣賞到了什么扁瓢? ...
    祝孜孜閱讀 480評論 2 6