學(xué)習(xí)JavaScript(一)

快速入門

生命變量用 var ,語句塊用花括號(hào)萨西,注釋類似C,可以用 // 或者 /**/

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

JavaScript 的數(shù)據(jù)類型有 Number 旭旭、字符串谎脯、布爾型、數(shù)組和對(duì)象等持寄。

JavaScript 不區(qū)分整數(shù)和浮點(diǎn)數(shù)源梭,數(shù)值的運(yùn)算符類似C。

字符串可以用雙引號(hào)或者單引號(hào)引起來稍味。

布爾值為 true 或者 false 废麻,運(yùn)算符類似C。

比較運(yùn)算符

JavaScript的相等比較運(yùn)算符有兩種模庐,一種是==烛愧,它會(huì)自動(dòng)轉(zhuǎn)換數(shù)據(jù)類型再比較,很多時(shí)候掂碱,會(huì)得到非常詭異的結(jié)果屑彻;另一種是===,它不會(huì)自動(dòng)轉(zhuǎn)換數(shù)據(jù)類型顶吮,如果數(shù)據(jù)類型不一致,返回false粪薛,如果一致悴了,再比較。這是JavaScript的設(shè)計(jì)缺陷违寿,在實(shí)際使用中都應(yīng)該用 === 湃交。

注意:NaN 在比較的時(shí)候是不能用 === 的,因?yàn)?NaN 不等于任何一個(gè)指藤巢,NaN === NaN 會(huì)返回 false 搞莺。判斷是否為 NaN 只能用 isNaN() 函數(shù)。

此外還要注意浮點(diǎn)數(shù)的比較掂咒,因?yàn)楦↑c(diǎn)數(shù)在運(yùn)算過程中會(huì)產(chǎn)生誤差才沧,因?yàn)橛?jì)算機(jī)無法精確表示無限循環(huán)小數(shù)。要比較兩個(gè)浮點(diǎn)數(shù)是否相等绍刮,只能計(jì)算它們之差的絕對(duì)值温圆,看是否小于某個(gè)閾值:

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

null 和 undefined

JavaScript 中的 null 類似 Python 中的 None ,表示空值孩革。

JavaScript 中的 undefined 表示未定義岁歉,但用處不太大,僅僅在判斷函數(shù)參數(shù)是否傳遞的情況下有用膝蜈。

字符串

字符串用單引號(hào)或者雙引號(hào)引起來锅移,轉(zhuǎn)義則使用反斜杠 \ 熔掺。使用 \x 可以后接十六進(jìn)制,用 \u 跟一個(gè) Unicode 字符非剃。

多行字符串

多行字符串可以用反引號(hào)引起來置逻,比如:

`這是一個(gè)
多行
字符串`;

字符串常用函數(shù)有:

  • 字符串拼接用加號(hào)+
  • 字符串長度用 length 屬性,例如 str.length
  • 用中括號(hào)下標(biāo)可以取出某個(gè)位置的字符努潘,比如 str[2]
  • toUpperCase() 或 toLowerCase() 能把字符串轉(zhuǎn)位全大寫或全小寫
  • indexOf() 函數(shù)可以搜索字符串出現(xiàn)的位置(區(qū)分大小寫)诽偷,失敗返回 -1
  • substring(start, end) 選出從start位置開始到end位置(不包括end)的子串

數(shù)組

Array 中可以包含任意類型的元素,用 length 可以獲得其元素個(gè)數(shù)疯坤。通過設(shè)置 length 可以延長或截?cái)鄶?shù)組报慕,但不建議這么做。

與String類似压怠,Array也可以通過 indexOf() 來搜索一個(gè)指定的元素的位置眠冈,沒找到返回 -1 。

使用 slice 可以截取數(shù)據(jù)的一部分菌瘫,返回 一個(gè)新的數(shù)組 蜗顽。

使用 push和pop 可以向數(shù)組尾部添加和彈出元素,使用 unshift和shift 可以向數(shù)組頭部添加或移出元素雨让。

使用 sort 可以對(duì)數(shù)組元素進(jìn)行排序雇盖,使用 reverse 可以把數(shù)組元素顛倒,這兩個(gè)函數(shù)都是 破壞性 的栖忠!

使用 concat 可以把兩個(gè)數(shù)組拼接起來崔挖。

join可以用一個(gè)分隔符把數(shù)組的元素串聯(lián)起來。

splice

splice 是數(shù)組的萬能操作函數(shù)庵寞,可以從指定的索引開始刪除若干元素狸相,然后再從該位置添加若干元素,如:

var arr = ['Microsoft', 'Apple', 'Yahoo', 'AOL', 'Excite', 'Oracle'];
// 從索引2開始刪除3個(gè)元素,然后再添加兩個(gè)元素:
arr.splice(2, 3, 'Google', 'Facebook'); // 返回刪除的元素 ['Yahoo', 'AOL', 'Excite']
arr; // ['Microsoft', 'Apple', 'Google', 'Facebook', 'Oracle']
// 只刪除,不添加:
arr.splice(2, 2); // ['Google', 'Facebook']
arr; // ['Microsoft', 'Apple', 'Oracle']
// 只添加,不刪除:
arr.splice(2, 0, 'Google', 'Facebook'); // 返回[],因?yàn)闆]有刪除任何元素
arr; // ['Microsoft', 'Apple', 'Google', 'Facebook', 'Oracle']

splice 的第一個(gè)參數(shù)是開始的位置捐川,第二個(gè)參數(shù)是刪除元素的個(gè)數(shù)脓鹃,隨后的元素是要插入的元素。這個(gè)函數(shù)也是 破壞性 的古沥!

對(duì)象

JavaScript的對(duì)象是一種無序的集合數(shù)據(jù)類型瘸右,它由若干鍵值對(duì)組成。例如:

var xiaoming = {
    name: '小明',
    birth: 1990,
    school: 'No.1 Middle School',
    height: 1.70,
    weight: 65,
    score: null
};

屬性名如果包含特殊符號(hào)渐白,需要用引號(hào)引起來尊浓,且在訪問的時(shí)候就不能用 . 來訪問,必須用中括號(hào)的方式纯衍,例如:

var xiaohong = {
    name: '小紅',
    'middle-school': 'No.1 Middle School'
};
console.log(xiaohong['middle-school'])

判斷一個(gè)對(duì)象是否擁有某個(gè)屬性栋齿,可以使用 in ,例如:

'name' in xiaoming; // true
'grade' in xiaoming; // false

要判斷一個(gè)屬性是否是對(duì)象自身擁有的,而不是繼承得到的瓦堵,可以用 hasOwnProperty() 方法:

var xiaoming = {
    name: '小明'
};
xiaoming.hasOwnProperty('name');     // true
xiaoming.hasOwnProperty('toString'); // false

Map

Map 是鍵值對(duì)的類型基协,與JS對(duì)象有所不同的是,對(duì)象的鍵只能是字符串菇用,而Map則無此限制澜驮。

初始化 Map 可以傳入一個(gè)二維數(shù)組,或者設(shè)置一個(gè)空 Map 再 set 值惋鸥;取得值則用 get 方法杂穷;判斷有無某個(gè)鍵用 has 方法,刪除用 delete 方法卦绣。

var m = new Map([['Michael', 95], ['Bob', 75], ['Tracy', 85]]);
m.set('John', 97)
m.delete('Tracy')
m.has('Adam')   // false
m.get('Bob')    // 75

Set

Set 是集合耐量,其中不能有重復(fù)元素,可以用一維數(shù)組來初始化集合滤港,使用 add 往里加元素廊蜒,使用 delete 刪除元素,用 has 來判斷是否有某個(gè)元素溅漾,例如:

s = new Set(["Alice", "Bob"])
s.add("Charlie")
s.delete("Bob")
s.has("Bob")     // false

注意I蕉!! Map和Set是ES6標(biāo)準(zhǔn)新增的數(shù)據(jù)類型添履!

循環(huán)

JavaScript 除了支持類似C語言的for屁倔、while、do...while 循環(huán)外暮胧,還支持 for ... in 循環(huán)來遍歷對(duì)象或數(shù)組汰现,例如:

var person = {fname:"John", lname:"Doe", age:25}; 
var text = "";

for (var x in person) {
    text += person[x];
}
console.log(text)        // JohnDoe25

var a = [1, 2, 3];
for (var x in a) {
    console.log(x);
}

條件判斷

JavaScript 的條件判斷用 if ... else if ... else 。

iterable

由于遍歷Map和Set無法使用下標(biāo)叔壤。為了統(tǒng)一集合類型,ES6標(biāo)準(zhǔn)引入了新的iterable類型口叙,Array炼绘、Map和Set都屬于iterable類型。具有iterable類型的集合可以通過新的 for ... of 循環(huán)來遍歷妄田。

var a = ['A', 'B', 'C'];
var s = new Set(['A', 'B', 'C']);
var m = new Map([[1, 'x'], [2, 'y'], [3, 'z']]);
for (var x of a) { // 遍歷Array
    console.log(x);
}
for (var x of s) { // 遍歷Set
    console.log(x);
}
for (var x of m) { // 遍歷Map
    console.log(x[0] + '=' + x[1]);
}

for...in 循環(huán)存在一些歷史遺留問題俺亮,而 for ... of 循環(huán)則解決了這些問題。

更好的方法直接使用iterable內(nèi)置的forEach方法疟呐,它接收一個(gè)函數(shù)脚曾,每次迭代就自動(dòng)回調(diào)該函數(shù),該函數(shù)的第一個(gè)參數(shù)是元素启具,第二個(gè)元素是當(dāng)前索引本讥,第三個(gè)參數(shù)是集合對(duì)象本身。例如:

var s = new Set(['A', 'B', 'C']);
s.forEach(function (element, sameElement, set) {
    console.log(element);
});

如果對(duì)某些參數(shù)不感興趣,由于JavaScript的函數(shù)調(diào)用不要求參數(shù)必須一致拷沸,因此可以 忽略它們 色查。例如,只需要獲得Array的element:

var a = ['A', 'B', 'C'];
a.forEach(function (element) {
    console.log(element);
});
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末撞芍,一起剝皮案震驚了整個(gè)濱河市秧了,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌序无,老刑警劉巖验毡,帶你破解...
    沈念sama閱讀 212,542評(píng)論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異帝嗡,居然都是意外死亡晶通,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,596評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門丈探,熙熙樓的掌柜王于貴愁眉苦臉地迎上來录择,“玉大人,你說我怎么就攤上這事碗降“撸” “怎么了?”我有些...
    開封第一講書人閱讀 158,021評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵讼渊,是天一觀的道長动看。 經(jīng)常有香客問我,道長爪幻,這世上最難降的妖魔是什么菱皆? 我笑而不...
    開封第一講書人閱讀 56,682評(píng)論 1 284
  • 正文 為了忘掉前任,我火速辦了婚禮挨稿,結(jié)果婚禮上仇轻,老公的妹妹穿的比我還像新娘。我一直安慰自己奶甘,他們只是感情好篷店,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,792評(píng)論 6 386
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著臭家,像睡著了一般疲陕。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上钉赁,一...
    開封第一講書人閱讀 49,985評(píng)論 1 291
  • 那天蹄殃,我揣著相機(jī)與錄音,去河邊找鬼你踩。 笑死诅岩,一個(gè)胖子當(dāng)著我的面吹牛讳苦,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播按厘,決...
    沈念sama閱讀 39,107評(píng)論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼医吊,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了逮京?” 一聲冷哼從身側(cè)響起卿堂,我...
    開封第一講書人閱讀 37,845評(píng)論 0 268
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎懒棉,沒想到半個(gè)月后草描,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,299評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡策严,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,612評(píng)論 2 327
  • 正文 我和宋清朗相戀三年穗慕,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片妻导。...
    茶點(diǎn)故事閱讀 38,747評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡逛绵,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出倔韭,到底是詐尸還是另有隱情术浪,我是刑警寧澤,帶...
    沈念sama閱讀 34,441評(píng)論 4 333
  • 正文 年R本政府宣布寿酌,位于F島的核電站胰苏,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏醇疼。R本人自食惡果不足惜硕并,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,072評(píng)論 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望秧荆。 院中可真熱鬧倔毙,春花似錦、人聲如沸乙濒。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,828評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽琉兜。三九已至,卻和暖如春毙玻,著一層夾襖步出監(jiān)牢的瞬間豌蟋,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,069評(píng)論 1 267
  • 我被黑心中介騙來泰國打工桑滩, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留梧疲,地道東北人允睹。 一個(gè)月前我還...
    沈念sama閱讀 46,545評(píng)論 2 362
  • 正文 我出身青樓,卻偏偏與公主長得像幌氮,于是被迫代替她去往敵國和親缭受。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,658評(píng)論 2 350