Javascript學(xué)習(xí)筆記(First Part) with 廖雪峰Js

開篇語

最近筆者考完了所有的考試店读,只需要做課程設(shè)計就可以等著滾回家睡大覺了。所以要開始著手傷心團(tuán)隊的項目事宜了攀芯。最鬧心的就是Javascript了屯断。所以現(xiàn)在要狠學(xué)一下Js 我最喜歡的當(dāng)然還是廖雪峰大神的網(wǎng)站了。深入淺出侣诺,生動形象殖演,而且還有在線模擬器,圖文并茂年鸳,十分值得菜鳥入門趴久。所以我就寫下這么一個筆記。算是廖雪峰大神的教程的縮略版搔确,把重點(diǎn)歸納總結(jié)出來彼棍,供給大家學(xué)習(xí)~~~

廖雪峰官方網(wǎng)站

正文

JavaScript歷史

要了解JavaScript,我們首先要回顧一下JavaScript的誕生膳算。
在上個世紀(jì)的1995年座硕,當(dāng)時的網(wǎng)景公司正憑借其Navigator瀏覽器成為Web時代開啟時最著名的第一代互聯(lián)網(wǎng)公司。
由于網(wǎng)景公司希望能在靜態(tài)HTML頁面上添加一些動態(tài)效果涕蜂,于是叫Brendan Eich這哥們在兩周之內(nèi)設(shè)計出了JavaScript語言华匾。你沒看錯,這哥們只用了10天時間机隙。
為什么起名叫JavaScript蜘拉?原因是當(dāng)時Java語言非常紅火萨西,所以網(wǎng)景公司希望借Java的名氣來推廣,但事實上JavaScript除了語法上有點(diǎn)像Java旭旭,其他部分基本上沒啥關(guān)系谎脯。


入門

JavaScript代碼可以直接嵌在網(wǎng)頁的任何地方,不過通常我們都把JavaScript代碼放到<code><head></code>中:

<html>
<head>
  <script>
    alert('Hello, world');
  </script>
</head>
<body>
~~~~
</body>
</html>

第二種方法是把JavaScript代碼放到一個單獨(dú)的.js文件您机,然后在HTML中通過<code><script src="..."></script></code>引入這個文件

<html>
<head>
  <script src="/static/js/abc.js"></script>
</head>
<body>
  ...
</body>
</html>

基本語法

JavaScript的語法和Java語言類似穿肄,每個語句以;結(jié)束年局,語句塊用<code>{...}</code>际看。但是,JavaScript并不強(qiáng)制要求在每個語句的結(jié)尾加<code>;</code>矢否,瀏覽器中負(fù)責(zé)執(zhí)行JavaScript代碼的引擎會自動在每個語句的結(jié)尾補(bǔ)上<code>;</code>仲闽。舉例如下:

if (2 > 1) {
    x = 1;
    y = 2;
    z = 3;
    if (x < y) {
        z = 4;
    }
    if (x > y) {
        z = 5;
    }
}

以//開頭直到行末的字符被視為行注釋,注釋是給開發(fā)人員看到僵朗,JavaScript引擎會自動忽略:

// 這是一行注釋
alert('hello'); // 這也是注釋

另一種塊注釋是用/.../把多行字符包裹起來赖欣,把一大“塊”視為一個注釋:

/* 從這里開始是塊注釋
仍然是注釋
仍然是注釋
注釋結(jié)束 */

Number

JavaScript不區(qū)分整數(shù)和浮點(diǎn)數(shù),統(tǒng)一用Number表示验庙,以下都是合法的Number類型:

123; // 整數(shù)123
0.456; // 浮點(diǎn)數(shù)0.456
1.2345e3; // 科學(xué)計數(shù)法表示1.2345x1000顶吮,等同于1234.5
-99; // 負(fù)數(shù)
NaN; // NaN表示Not a Number,當(dāng)無法計算結(jié)果時用NaN表示
Infinity; // Infinity表示無限大粪薛,當(dāng)數(shù)值超過了JavaScript的Number所能表示的最大值時悴了,就表示為Infinity

計算機(jī)由于使用二進(jìn)制,所以违寿,有時候用十六進(jìn)制表示整數(shù)比較方便湃交,十六進(jìn)制用0x前綴和0-9,a-f表示藤巢,例如:0xff00搞莺,0xa5b4c3d2,等等掂咒,它們和十進(jìn)制表示的數(shù)值完全一樣才沧。
Number可以直接做四則運(yùn)算,規(guī)則和數(shù)學(xué)一致:

1 + 2; // 3
(1 + 2) * 5 / 2; // 7.5
2 / 0; // Infinity
0 / 0; // NaN
10 % 3; // 1
10.5 % 3; // 1.5

注意%是求余運(yùn)算绍刮。


字符串

字符串是以單引號'或雙引號"括起來的任意文本温圆,比如'abc',"xyz"等等录淡。請注意捌木,''或""本身只是一種表示方式,不是字符串的一部分嫉戚,因此刨裆,字符串'abc'只有a澈圈,b,c這3個字符帆啃。


布爾值

布爾值和布爾代數(shù)的表示完全一致瞬女,一個布爾值只有true、false兩種值努潘,要么是true诽偷,要么是false,可以直接用true疯坤、false表示布爾值报慕,也可以通過布爾運(yùn)算計算出來:

true; // 這是一個true值
false; // 這是一個false值
2 > 1; // 這是一個true值
2 >= 3; // 這是一個false值

&&運(yùn)算是與運(yùn)算,只有所有都為true压怠,&&運(yùn)算結(jié)果才是true:

true && true; // 這個&&語句計算結(jié)果為true
true && false; // 這個&&語句計算結(jié)果為false
false && true && false; // 這個&&語句計算結(jié)果為false

||運(yùn)算是或運(yùn)算眠冈,只要其中有一個為true,||運(yùn)算結(jié)果就是true:

false || false; // 這個||語句計算結(jié)果為false
true || false; // 這個||語句計算結(jié)果為true
false || true || false; // 這個||語句計算結(jié)果為true

!運(yùn)算是非運(yùn)算菌瘫,它是一個單目運(yùn)算符蜗顽,把true變成false,false變成true:

! true; // 結(jié)果為false
! false; // 結(jié)果為true
! (2 > 5); // 結(jié)果為true

布爾值經(jīng)常用在條件判斷中雨让,比如:

var age = 15;
if (age >= 18) {
    alert('adult');
} else {
    alert('teenager');
}```
比較運(yùn)算符
當(dāng)我們對Number做比較時雇盖,可以通過比較運(yùn)算符得到一個布爾值:

2 > 5; // false
5 >= 2; // true
7 == 7; // true

實際上,JavaScript允許對任意數(shù)據(jù)類型做比較:

false == 0; // true
false === 0; // false

要特別注意相等運(yùn)算符==栖忠。JavaScript在設(shè)計時崔挖,有兩種比較運(yùn)算符:
第一種是==比較,它會自動轉(zhuǎn)換數(shù)據(jù)類型再比較娃闲,很多時候虚汛,會得到非常詭異的結(jié)果;
第二種是===比較皇帮,它不會自動轉(zhuǎn)換數(shù)據(jù)類型卷哩,如果數(shù)據(jù)類型不一致,返回false属拾,如果一致将谊,再比較。
由于JavaScript這個設(shè)計缺陷渐白,不要使用==比較尊浓,始終堅持使用===比較。
另一個例外是NaN這個特殊的Number與所有其他值都不相等纯衍,包括它自己:

NaN === NaN; // false

唯一能判斷NaN的方法是通過isNaN()函數(shù):

isNaN(NaN); // true

最后要注意浮點(diǎn)數(shù)的相等比較:

1 / 3 === (1 - 2 / 3); // false

這不是JavaScript的設(shè)計缺陷栋齿。浮點(diǎn)數(shù)在運(yùn)算過程中會產(chǎn)生誤差,因為計算機(jī)無法精確表示無限循環(huán)小數(shù)。要比較兩個浮點(diǎn)數(shù)是否相等瓦堵,只能計算它們之差的絕對值基协,看是否小于某個閾值:

Math.abs(1 / 3 - (1 - 2 / 3)) < 0.0000001; // true




--------



>#####數(shù)組
數(shù)組是一組按順序排列的集合,集合的每個值稱為元素菇用。JavaScript的數(shù)組可以包括任意數(shù)據(jù)類型澜驮。例如:

[1, 2, 3.14, 'Hello', null, true];

上述數(shù)組包含6個元素。數(shù)組用[]表示惋鸥,元素之間用,分隔杂穷。
另一種創(chuàng)建數(shù)組的方法是通過Array()函數(shù)實現(xiàn):

new Array(1, 2, 3); // 創(chuàng)建了數(shù)組[1, 2, 3]


---------

>#####對象
JavaScript的對象是一組由鍵-值組成的無序集合,例如:

var person = {
name: 'Bob',
age: 20,
tags: ['js', 'web', 'mobile'],
city: 'Beijing',
hasCar: true,
zipcode: null
};


--------




>#####變量
變量的概念基本上和初中代數(shù)的方程變量是一致的卦绣,只是在計算機(jī)程序中耐量,變量不僅可以是數(shù)字,還可以是任意數(shù)據(jù)類型迎卤。
變量在JavaScript中就是用一個變量名表示拴鸵,變量名是大小寫英文、數(shù)字蜗搔、$和_的組合,且不能用數(shù)字開頭八堡。變量名也不能是JavaScript的關(guān)鍵字樟凄,如if、while等兄渺。申明一個變量用var語句缝龄,比如:

var a; // 申明了變量a,此時a的值為undefined
var $b = 1; // 申明了變量$b挂谍,同時給$b賦值叔壤,此時$b的值為1
var s_007 = '007'; // s_007是一個字符串
var Answer = true; // Answer是一個布爾值true
var t = null; // t的值是null


---------

>#####條件判斷
JavaScript使用```if () { ... } else { ... }```來進(jìn)行條件判斷。例如口叙,根據(jù)年齡顯示不同內(nèi)容炼绘,可以用if語句實現(xiàn)如下:

var age = 20;
if (age >= 18) { // 如果age >= 18為true,則執(zhí)行if語句塊
alert('adult');
} else { // 否則執(zhí)行else語句塊
alert('teenager');
}```
其中else語句是可選的妄田。如果語句塊只包含一條語句俺亮,那么可以省略{}:

var age = 20;
if (age >= 18)
    alert('adult');
else
    alert('teenager');

省略{}的危險之處在于,如果后來想添加一些語句疟呐,卻忘了寫{}脚曾,就改變了if...else...的語義,例如:

var age = 20;
if (age >= 18)
    alert('adult');
else
    console.log('age < 18'); // 添加一行日志
    alert('teenager'); // <- 這行語句已經(jīng)不在else的控制范圍了

如果還要更細(xì)致地判斷條件启具,可以使用多個if...else...的組合:

var age = 3;
if (age >= 18) {
    alert('adult');
} else if (age >= 6) {
    alert('teenager');
} else {
    alert('kid');
}

循環(huán)JavaScript的循環(huán)有兩種本讥,一種是for循環(huán),通過初始條件、結(jié)束條件和遞增條件來循環(huán)執(zhí)行語句塊:
var x = 0;
var i;
for (i=1; i<=10000; i++) {
    x = x + i;
}
x; // 50005000

for ... in
for循環(huán)的一個變體是for ... in循環(huán)拷沸,它可以把一個對象的所有屬性依次循環(huán)出來:

var o = {
    name: 'Jack',
    age: 20,
    city: 'Beijing'
};
for (var key in o) {
    alert(key); // 'name', 'age', 'city'
}```
**while**
for循環(huán)在已知循環(huán)的初始和結(jié)束條件時非常有用旨椒。而上述忽略了條件的for循環(huán)容易讓人看不清循環(huán)的邏輯,此時用while循環(huán)更佳堵漱。
while循環(huán)只有一個判斷條件综慎,條件滿足,就不斷循環(huán)勤庐,條件不滿足時則退出循環(huán)示惊。比如我們要計算100以內(nèi)所有奇數(shù)之和,可以用while循環(huán)實現(xiàn):

var x = 0;
var n = 99;
while (n > 0) {
x = x + n;
n = n - 2;
}
x; // 2500```
在循環(huán)內(nèi)部變量n不斷自減愉镰,直到變?yōu)?1時米罚,不再滿足while條件,循環(huán)退出丈探。
do ... while
最后一種循環(huán)是do { ... } while()循環(huán)录择,它和while循環(huán)的唯一區(qū)別在于,不是在每次循環(huán)開始的時候判斷條件碗降,而是在每次循環(huán)完成的時候判斷條件:

var n = 0;
do {
    n = n + 1;
} while (n < 100);
n; // 100```
用do { ... } while()循環(huán)要小心隘竭,循環(huán)體會至少執(zhí)行1次,而for和while循環(huán)則可能一次都不執(zhí)行讼渊。


--------



>#####Map
Map是一組鍵值對的結(jié)構(gòu)动看,具有極快的查找速度。
舉個例子爪幻,假設(shè)要根據(jù)同學(xué)的名字查找對應(yīng)的成績菱皆,如果用Array實現(xiàn),需要兩個Array:

var names = ['Michael', 'Bob', 'Tracy'];
var scores = [95, 75, 85];```
給定一個名字挨稿,要查找對應(yīng)的成績仇轻,就先要在names中找到對應(yīng)的位置,再從scores取出對應(yīng)的成績奶甘,Array越長篷店,耗時越長。
如果用Map實現(xiàn)甩十,只需要一個“名字”-“成績”的對照表船庇,直接根據(jù)名字查找成績,無論這個表有多大侣监,查找速度都不會變慢鸭轮。用JavaScript寫一個Map如下:

var m = new Map([['Michael', 95], ['Bob', 75], ['Tracy', 85]]);
m.get('Michael'); // 95

初始化Map需要一個二維數(shù)組,或者直接初始化一個空Map橄霉。Map具有以下方法:

var m = new Map(); // 空Map
m.set('Adam', 67); // 添加新的key-value
m.set('Bob', 59);
m.has('Adam'); // 是否存在key 'Adam': true
m.get('Adam'); // 67
m.delete('Adam'); // 刪除key 'Adam'
m.get('Adam'); // undefined

由于一個key只能對應(yīng)一個value窃爷,所以邑蒋,多次對一個key放入value,后面的值會把前面的值沖掉:

var m = new Map();
m.set('Adam', 67);
m.set('Adam', 88);
m.get('Adam'); // 88

Set

Set和Map類似按厘,也是一組key的集合医吊,但不存儲value。由于key不能重復(fù)逮京,所以卿堂,在Set中,沒有重復(fù)的key懒棉。
要創(chuàng)建一個Set草描,需要提供一個Array作為輸入,或者直接創(chuàng)建一個空Set:

var s1 = new Set(); // 空Set
var s2 = new Set([1, 2, 3]); // 含1, 2, 3

重復(fù)元素在Set中自動被過濾:

var s = new Set([1, 2, 3, 3, '3']);
s; // Set {1, 2, 3, "3"}

注意數(shù)字3和字符串'3'是不同的元素策严。
通過add(key)方法可以添加元素到Set中穗慕,可以重復(fù)添加,但不會有效果:

>>> s.add(4)
>>> s
{1, 2, 3, 4}
>>> s.add(4)
>>> s
{1, 2, 3, 4}

通過delete(key)方法可以刪除元素:

var s = new Set([1, 2, 3]);
s; // Set {1, 2, 3}
s.delete(3);
s; // Set {1, 2}

第一部分結(jié)束語

本來是想在大神的基礎(chǔ)上加一些自己的見解的妻导,但是看了不少次了逛绵,還是覺得大神寫的真是精煉,寥寥幾句加進(jìn)去也無異于畫蛇添足倔韭,所以直接搬運(yùn)我覺得精華的一部分就來啦术浪。明天再繼續(xù)寫其他的。我先去看下后面的內(nèi)容~~~

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末狐肢,一起剝皮案震驚了整個濱河市添吗,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌份名,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,542評論 6 504
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件妓美,死亡現(xiàn)場離奇詭異僵腺,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)壶栋,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,822評論 3 394
  • 文/潘曉璐 我一進(jìn)店門辰如,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人贵试,你說我怎么就攤上這事琉兜。” “怎么了毙玻?”我有些...
    開封第一講書人閱讀 163,912評論 0 354
  • 文/不壞的土叔 我叫張陵豌蟋,是天一觀的道長。 經(jīng)常有香客問我桑滩,道長梧疲,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,449評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮幌氮,結(jié)果婚禮上缭受,老公的妹妹穿的比我還像新娘。我一直安慰自己该互,他們只是感情好米者,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,500評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著宇智,像睡著了一般蔓搞。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上普筹,一...
    開封第一講書人閱讀 51,370評論 1 302
  • 那天败明,我揣著相機(jī)與錄音,去河邊找鬼太防。 笑死妻顶,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的蜒车。 我是一名探鬼主播讳嘱,決...
    沈念sama閱讀 40,193評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼酿愧!你這毒婦竟也來了沥潭?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,074評論 0 276
  • 序言:老撾萬榮一對情侶失蹤嬉挡,失蹤者是張志新(化名)和其女友劉穎钝鸽,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體庞钢,經(jīng)...
    沈念sama閱讀 45,505評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡拔恰,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,722評論 3 335
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了基括。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片颜懊。...
    茶點(diǎn)故事閱讀 39,841評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖风皿,靈堂內(nèi)的尸體忽然破棺而出河爹,到底是詐尸還是另有隱情,我是刑警寧澤桐款,帶...
    沈念sama閱讀 35,569評論 5 345
  • 正文 年R本政府宣布咸这,位于F島的核電站,受9級特大地震影響鲁僚,放射性物質(zhì)發(fā)生泄漏炊苫。R本人自食惡果不足惜裁厅,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,168評論 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望侨艾。 院中可真熱鬧执虹,春花似錦、人聲如沸唠梨。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,783評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽当叭。三九已至茬故,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間蚁鳖,已是汗流浹背磺芭。 一陣腳步聲響...
    開封第一講書人閱讀 32,918評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留醉箕,地道東北人钾腺。 一個月前我還...
    沈念sama閱讀 47,962評論 2 370
  • 正文 我出身青樓,卻偏偏與公主長得像讥裤,于是被迫代替她去往敵國和親放棒。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,781評論 2 354

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

  • 基礎(chǔ)入門 1己英、基本語法(注意:js嚴(yán)格區(qū)分大小寫) 定義變量(字符串盡量使用單引號) 賦值 判斷語句 循環(huán)語句 注...
    httIsHere閱讀 294評論 0 0
  • 《ijs》速成開發(fā)手冊3.0 官方用戶交流:iApp開發(fā)交流(1) 239547050iApp開發(fā)交流(2) 10...
    葉染柒丶閱讀 5,138評論 0 7
  • 第一章: JS簡介 從當(dāng)初簡單的語言间螟,變成了現(xiàn)在能夠處理復(fù)雜計算和交互,擁有閉包损肛、匿名函數(shù)厢破, 甚至元編程等...
    LaBaby_閱讀 1,670評論 0 6
  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語法,類相關(guān)的語法治拿,內(nèi)部類的語法溉奕,繼承相關(guān)的語法,異常的語法忍啤,線程的語...
    子非魚_t_閱讀 31,631評論 18 399
  • 你的生日快到了吧。 很久不見仙辟,真是想你了同波,總把別人錯看成你,這世界到處都是你呢叠国。 我還要遇見幾個...
    Allier閱讀 403評論 0 0