JavaScript Memo (一)

簡介

JavaScript是一種運(yùn)行在瀏覽器中的解釋型的編程語言。

1995年力喷,網(wǎng)景公司的Brendan Eich在兩周之內(nèi)設(shè)計出了JavaScript語言横媚。

ECMAScript

因為網(wǎng)景開發(fā)了JavaScript,一年后微軟又模仿JavaScript開發(fā)了JScript嘉裤,為了讓JavaScript成為全球標(biāo)準(zhǔn)廊驼,幾個公司聯(lián)合ECMA(European Computer Manufacturers Association)組織定制了JavaScript語言的標(biāo)準(zhǔn)据过,被稱為ECMAScript標(biāo)準(zhǔn)。

ECMAScript是一種語言標(biāo)準(zhǔn)妒挎,而JavaScript是網(wǎng)景公司對ECMAScript標(biāo)準(zhǔn)的一種實現(xiàn)蝶俱。

最新版ECMAScript 6標(biāo)準(zhǔn)(簡稱ES6)已經(jīng)在2015年6月正式發(fā)布了,所以饥漫,講到JavaScript的版本榨呆,實際上就是說它實現(xiàn)了ECMAScript標(biāo)準(zhǔn)的哪個版本。

基本語法

  • 語句以;結(jié)束
  • 語句塊用{...}
  • 以//開頭直到行末的字符被視為行注釋
  • 塊注釋是用/*...*/把多行字符包裹起來

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

Number

JavaScript不區(qū)分整數(shù)和浮點數(shù)庸队,統(tǒng)一用Number表示积蜻,以下都是合法的Number類型

123; // 整數(shù)123
0.456; // 浮點數(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

Number四則運(yùn)算

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

字符串

字符串是以單引號'或雙引號"括起來的任意文本宾尚,比如'abc'丙笋,"xyz"等等谢澈。

轉(zhuǎn)義字符\可以轉(zhuǎn)義很多字符,\n表示換行御板,\t表示制表符锥忿,字符\本身也要轉(zhuǎn)義,\\表示的字符就是\

ASCII字符可以以\x##形式的十六進(jìn)制表示'\x41'; // 完全等同于 'A'

用\u####表示一個Unicode字符'\u4e2d\u6587'; // 完全等同于 '中文'

多行字符串怠肋,ES6新增用` ... `表示

`這是一個
多行
字符串`;

用+號連接字符串,ES6新增了一種模板字符串

var name = '小明';
var age = 20;
var message = '你好, ' + name + ', 你今年' + age + '歲了!';
alert(message);

ES6新模板字符串
var message = `你好, ${name}, 你今年${age}歲了!`;
alert(message);

獲取字符串某個指定位置的字符敬鬓,使用類似Array的下標(biāo)操作,索引號從0開始

var s = 'Hello, world!';

s[0]; // 'H'
s[6]; // ' '
s[7]; // 'w'
s[12]; // '!'
s[13]; // undefined 超出范圍的索引不會報錯笙各,但一律返回undefined

注意:字符串是不可變的钉答,如果對字符串的某個索引賦值,不會有任何錯誤杈抢,但是数尿,也沒有任何效果

JavaScript為字符串提供了一些常用方法,調(diào)用這些方法本身不會改變原有字符串的內(nèi)容惶楼,而是返回一個新字符串

布爾值

一個布爾值只有true右蹦、false兩種值,要么是true鲫懒,要么是false

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

注意:JavaScript允許對任意數(shù)據(jù)類型做比較

要特別注意相等運(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

數(shù)組

JavaScript的數(shù)組可以包括任意數(shù)據(jù)類型

[1, 2, 3.14, 'Hello', null, true];
new Array(1, 2, 3);

注意朦佩,直接給Array的length賦一個新的值會導(dǎo)致Array大小的變化

var arr = [1, 2, 3];
arr.length; // 3
arr.length = 6;
arr; // arr變?yōu)閇1, 2, 3, undefined, undefined, undefined]
arr.length = 2;
arr; // arr變?yōu)閇1, 2]

Array通過indexOf()來搜索一個指定的元素的位置
slice()截取Array的部分元素并思,然后返回一個新的Array

var arr = ['A', 'B', 'C', 'D', 'E', 'F', 'G'];
arr.slice(0, 3); // 從索引0開始,到索引3結(jié)束语稠,但不包括索引3: ['A', 'B', 'C']
arr.slice(3); // 從索引3開始到結(jié)束: ['D', 'E', 'F', 'G']

push()向Array的末尾添加若干元素宋彼,pop()則把Array的最后一個元素刪除掉

unshift()方法往Array的頭部添加若干元素弄砍,shift()方法把Array的第一個元素刪掉

sort()對當(dāng)前Array進(jìn)行排序

reverse()把整個Array反轉(zhuǎn)

splice()方法修改Array,從指定的索引開始刪除若干元素输涕,然后再從該位置添加若干元素

var arr = ['Microsoft', 'Apple', 'Yahoo', 'AOL', 'Excite', 'Oracle'];
// 從索引2開始刪除3個元素,然后再添加兩個元素:
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'); // 返回[],因為沒有刪除任何元素
arr; // ['Microsoft', 'Apple', 'Google', 'Facebook', 'Oracle']

concat()方法把當(dāng)前的Array和另一個Array連接起來音婶,并返回一個新的Array,它可以接收任意個元素和Array占贫,并且自動把Array拆開桃熄,然后全部添加到新的Array里
join()方法把當(dāng)前Array的每個元素都用指定的字符串連接起來,然后返回連接后的字符串

var arr = ['A', 'B', 'C', 1, 2, 3];
arr.join('-'); // 'A-B-C-1-2-3'

對象

JavaScript的對象是一組由鍵-值組成的無序集合,鍵都是字符串類型型奥,值可以是任意數(shù)據(jù)類型瞳收。

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

JavaScript的對象是動態(tài)類型,你可以自由地給一個對象添加或刪除屬性

var xiaoming = {
    name: '小明'
};
xiaoming.age; // undefined
xiaoming.age = 18; // 新增一個age屬性
xiaoming.age; // 18
delete xiaoming.age; // 刪除age屬性
xiaoming.age; // undefined
delete xiaoming['name']; // 刪除name屬性
xiaoming.name; // undefined
delete xiaoming.school; // 刪除一個不存在的school屬性也不會報錯

如果要檢測對象是否擁有某一屬性厢汹,包括繼承得到的螟深,可以用in操作符
要判斷一個屬性是否是自身擁有的,而不是繼承得到的烫葬,可以用hasOwnProperty()方法

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

Map

JavaScript的對象有個問題界弧,就是鍵必須是字符串。但實際上Number或者其他數(shù)據(jù)類型作為鍵也是合理的搭综。為了解決這個問題垢箕,最新的ES6規(guī)范引入了新的數(shù)據(jù)類型Map。

Map是一組鍵值對的結(jié)構(gòu)兑巾,具有極快的查找速度条获。

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

Set

Set也是一組key的集合,但不存儲value蒋歌。由于key不能重復(fù)帅掘,所以,在Set中堂油,沒有重復(fù)的key修档。

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

通過add(key)方法添加元素到Set中

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

var s = new Set([1, 2, 3, 3, '3']);
s; // Set {1, 2, 3, "3"}
s.add(4);// 添加元素4
s.delete(3);// 添加元素3

變量

變量本身類型不固定的語言稱之為動態(tài)語言,與之對應(yīng)的是靜態(tài)語言府框。靜態(tài)語言在定義變量時必須指定變量類型吱窝,如果賦值的時候類型不匹配,就會報錯迫靖。

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

待續(xù)...

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末撕予,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子蜈首,更是在濱河造成了極大的恐慌实抡,老刑警劉巖欠母,帶你破解...
    沈念sama閱讀 211,376評論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異吆寨,居然都是意外死亡赏淌,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,126評論 2 385
  • 文/潘曉璐 我一進(jìn)店門啄清,熙熙樓的掌柜王于貴愁眉苦臉地迎上來六水,“玉大人,你說我怎么就攤上這事辣卒≈兰郑” “怎么了?”我有些...
    開封第一講書人閱讀 156,966評論 0 347
  • 文/不壞的土叔 我叫張陵荣茫,是天一觀的道長想帅。 經(jīng)常有香客問我,道長啡莉,這世上最難降的妖魔是什么港准? 我笑而不...
    開封第一講書人閱讀 56,432評論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮咧欣,結(jié)果婚禮上浅缸,老公的妹妹穿的比我還像新娘。我一直安慰自己魄咕,他們只是感情好衩椒,可當(dāng)我...
    茶點故事閱讀 65,519評論 6 385
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著蚕礼,像睡著了一般烟具。 火紅的嫁衣襯著肌膚如雪梢什。 梳的紋絲不亂的頭發(fā)上奠蹬,一...
    開封第一講書人閱讀 49,792評論 1 290
  • 那天,我揣著相機(jī)與錄音嗡午,去河邊找鬼囤躁。 笑死,一個胖子當(dāng)著我的面吹牛荔睹,可吹牛的內(nèi)容都是我干的狸演。 我是一名探鬼主播,決...
    沈念sama閱讀 38,933評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼僻他,長吁一口氣:“原來是場噩夢啊……” “哼宵距!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起吨拗,我...
    開封第一講書人閱讀 37,701評論 0 266
  • 序言:老撾萬榮一對情侶失蹤满哪,失蹤者是張志新(化名)和其女友劉穎婿斥,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體哨鸭,經(jīng)...
    沈念sama閱讀 44,143評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡民宿,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,488評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了像鸡。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片活鹰。...
    茶點故事閱讀 38,626評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖只估,靈堂內(nèi)的尸體忽然破棺而出志群,到底是詐尸還是另有隱情,我是刑警寧澤蛔钙,帶...
    沈念sama閱讀 34,292評論 4 329
  • 正文 年R本政府宣布赖舟,位于F島的核電站,受9級特大地震影響夸楣,放射性物質(zhì)發(fā)生泄漏宾抓。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,896評論 3 313
  • 文/蒙蒙 一豫喧、第九天 我趴在偏房一處隱蔽的房頂上張望石洗。 院中可真熱鬧,春花似錦紧显、人聲如沸讲衫。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,742評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽涉兽。三九已至,卻和暖如春篙程,著一層夾襖步出監(jiān)牢的瞬間枷畏,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,977評論 1 265
  • 我被黑心中介騙來泰國打工虱饿, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留拥诡,地道東北人。 一個月前我還...
    沈念sama閱讀 46,324評論 2 360
  • 正文 我出身青樓氮发,卻偏偏與公主長得像渴肉,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子爽冕,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,494評論 2 348

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

  • 第5章 引用類型(返回首頁) 本章內(nèi)容 使用對象 創(chuàng)建并操作數(shù)組 理解基本的JavaScript類型 使用基本類型...
    大學(xué)一百閱讀 3,216評論 0 4
  • 有人說過仇祭,很多彎路到最后都成了直路,所有的坑到最后也都成了坦途颈畸;所謂的直路和坦途并不是擺在眼前的乌奇,都是不斷的的...
    老衲法號一眉道人閱讀 1,319評論 0 4
  • 秋盡夜還長嚣艇,玉蟾映小窗。繡簾輕华弓、風(fēng)送新涼食零。思緒悠悠人不寐,難成夢寂屏,惹愁腸贰谣。 憶起舊韶光,君顏鬢可蒼迁霎?又十年吱抚、別久成...
    田夢_閱讀 444評論 27 26