簡介
什么是JavaScript?
JavaScript ( JS ) 是一種具有函數(shù)優(yōu)先的輕量級(jí),解釋型或即時(shí)編譯型的編程語言财岔。
函數(shù)優(yōu)先:編程語言中的函數(shù)可以被當(dāng)作參數(shù)傳遞給其他函數(shù)吞杭,可以作為另一個(gè)函數(shù)的返回值,還可以被賦值給一個(gè)變量。
解釋型:對(duì)標(biāo)編譯型語言蚀瘸,編譯型需預(yù)先將源碼編成中間碼狡蝶,再由解釋器解釋運(yùn)行。解釋型不需要預(yù)先編譯贮勃,在程序在運(yùn)行時(shí)才由解釋器翻譯運(yùn)行贪惹。
JavaScript 的標(biāo)準(zhǔn)是ECMAScript截至 2012 年,所有的現(xiàn)代瀏覽器都完整的支持 ECMAScript 5.1寂嘉,舊版本的瀏覽器至少支持 ECMAScript 3 標(biāo)準(zhǔn)奏瞬。
我們所熟知的ES6是在2015年6月17日,由ECMA國際組織發(fā)布的ECMAScript 的第六版泉孩,該版本正式名稱為 ECMAScript 2015硼端。
https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Language_Resources
使用場景
互聯(lián)網(wǎng)的興起,JavaScript的使用范圍已經(jīng)超出了瀏覽器寓搬。
- 瀏覽器平臺(tái)珍昨。HTML5的出現(xiàn),瀏覽器本身的功能越來越強(qiáng)句喷,JavaScript 因此得以調(diào)用許多系統(tǒng)功能镣典,如操作本地文件、操作圖片唾琼、調(diào)用攝像頭和麥克風(fēng)兄春,可以開發(fā)更多富客戶端產(chǎn)品。
- 服務(wù)端應(yīng)用锡溯。node的出現(xiàn)使得 JavaScript 可以用于開發(fā)服務(wù)器端應(yīng)用赶舆,也使得JavaScript成為一門可以同時(shí)開發(fā)前后端的語言。
- 移動(dòng)應(yīng)用趾唱。js也正在成為手機(jī)應(yīng)用的開發(fā)語言涌乳,比如:React Native 項(xiàng)目則是將 JavaScript 寫的組件,編譯成原生組件甜癞。
- 桌面應(yīng)用夕晓。JavaScript甚至可以開發(fā)桌面應(yīng)用,比如electronjs悠咱。
- 數(shù)據(jù)庫操作蒸辆。在一些Nosql數(shù)據(jù)都是支持JavaScript作為操作語言,像mongodb析既。
基本語法
變量
變量是對(duì)值的引用躬贡,JavaScript 的變量名區(qū)分大小寫,A
和a
是兩個(gè)不同的變量眼坏。
var total; // 未賦值的變量是 undefined拂玻,它是個(gè)特殊的值,表示無定義。
total = 1;
var a,b; // 一個(gè)var后可以聲明多個(gè)變量檐蚜。
變量提升
你可能很奇怪魄懂,執(zhí)行下面代碼沒有報(bào)錯(cuò)。由于JavaScript引擎工作方式是先解析代碼闯第,獲取所有被聲明的變量市栗,換句話說就是所有的變量的聲明語句,都被提升到代碼的頭部咳短。
console.log(a);
var a = 1;
變量規(guī)則
第一個(gè)字符任意 Unicode 字母(包括英文字母和其他語言的字母)填帽,以及美元符號(hào)(
$
)和下劃線(_
)第二個(gè)字符及后面的字符,除了 Unicode 字母咙好、美元符號(hào)和下劃線篡腌,還可以用數(shù)字
0-9
。
另外中文也可以聲明變量勾效,下面保留字除外
arguments哀蘑、break、case葵第、catch、class合溺、const卒密、continue、debugger棠赛、default哮奇、delete、do睛约、else鼎俘、enum、eval辩涝、export贸伐、extends、false怔揩、finally捉邢、for、function商膊、if伏伐、implements、import晕拆、in藐翎、instanceof、interface、let吝镣、new堤器、null、package赤惊、private吼旧、protected、public未舟、return圈暗、static、super裕膀、switch员串、this、throw昼扛、true寸齐、try、typeof抄谐、var渺鹦、void、while蛹含、with毅厚、yield。
語句
JavaScript程序的執(zhí)行單位行浦箱,一般情況一行就是一條語句吸耿,如果一行要寫多個(gè)語句我們使用;
表示語句結(jié)束。
var total = 1 + 1; // 聲明了一個(gè)變量total酷窥,然后將1+1的運(yùn)算結(jié)果賦值給它咽安。
注釋
// 這是單行注釋
/*
這是
多行
注釋
*/
區(qū)塊
JavaScript使用大括號(hào)將多條語句包裹起來表示一個(gè)區(qū)塊,注意var
聲明的變量不構(gòu)成單獨(dú)的作用域蓬推,這里區(qū)別于java妆棒。
{
var a = 1;
}
a // 1
條件語句
// if結(jié)構(gòu)
if (m === 1){ // 往往由一個(gè)條件表達(dá)式產(chǎn)生的
console.log('ok')
}
// 或者
if (bool) console.log('ok');
// if/else結(jié)構(gòu)
if (m === 1){
語句;
}else{
語句;
}
// if/else if.../else 結(jié)構(gòu) m==1 m==2 其它
if (m === 1) {
} else if(m === 2){
}else {
}
switch 結(jié)構(gòu)
switch (m) {
case 1:
// ...
break;
case 2:
// ...
break;
default:
// ...
}
注意區(qū)別 ==與===
使用==比較兩個(gè)變量時(shí),會(huì)發(fā)生隱式類型轉(zhuǎn)換沸伏,例如募逞,自動(dòng)將字符串類型轉(zhuǎn)換為數(shù)字類型。
為了避免隱式轉(zhuǎn)換帶來的問題馋评,我們都是用=== 進(jìn)行嚴(yán)格進(jìn)行比較放接。
三元運(yùn)算符
三元運(yùn)算符也可以用于邏輯判斷。
(條件) ? 表達(dá)式1 : 表達(dá)式2
循環(huán)語句
var i = 0;
while (i < 100) {
console.log('i 當(dāng)前為:' + i);
i = i + 1;
}
// 區(qū)別上面留特,它至少會(huì)執(zhí)行一次
var i = 0;
do {
console.log('i 當(dāng)前為:' + i);
} while (i < 100);
for循環(huán)語句
- 初始化表達(dá)式:確定循環(huán)變量的初始值纠脾,只在循環(huán)開始時(shí)執(zhí)行一次玛瘸。
- 條件表達(dá)式:每輪循環(huán)開始時(shí),都要執(zhí)行這個(gè)條件表達(dá)式苟蹈,只有值為真糊渊,才繼續(xù)進(jìn)行循環(huán)。
- 遞增表達(dá)式:每輪循環(huán)的最后一個(gè)操作慧脱,通常用來遞增循環(huán)變量渺绒。
for (初始化表達(dá)式; 條件; 遞增表達(dá)式) {
語句
}
break 和 continue
break
語句用于跳出代碼塊或循環(huán),continue
是結(jié)束當(dāng)前循環(huán)菱鸥,跳到下一次宗兼。
數(shù)據(jù)類型
null和undefined
● 變量沒有初始化:undefined。
● 變量不可用:null氮采。
數(shù)值
整數(shù)和浮點(diǎn)數(shù)殷绍,JavaScript 內(nèi)部,所有數(shù)字都是以64位浮點(diǎn)數(shù)形式儲(chǔ)存鹊漠,即使整數(shù)也是如此主到。
1 === 1.0 // true
數(shù)值精度:根據(jù)國際標(biāo)準(zhǔn) IEEE 754,JavaScript 浮點(diǎn)數(shù)的64個(gè)二進(jìn)制位躯概,從最左邊開始登钥,是這樣組成的。
- 第1位:符號(hào)位娶靡,
0
表示正數(shù)怔鳖,1
表示負(fù)數(shù) - 第2位到第12位(共11位):指數(shù)部分
- 第13位到第64位(共52位):小數(shù)部分(即有效數(shù)字)
數(shù)值范圍:64位浮點(diǎn)數(shù)的指數(shù)部分的長度是11個(gè)二進(jìn)制位,意味著指數(shù)部分的最大值是2047(2的11次方減1)超出的范圍不能表示固蛾。
數(shù)值進(jìn)制:
- 十進(jìn)制:沒有前導(dǎo)0的數(shù)值。
- 八進(jìn)制:有前綴
0o
或0O
的數(shù)值度陆,或者有前導(dǎo)0艾凯、且只用到0-7的八個(gè)阿拉伯?dāng)?shù)字的數(shù)值。 - 十六進(jìn)制:有前綴
0x
或0X
的數(shù)值懂傀。 - 二進(jìn)制:有前綴
0b
或0B
的數(shù)值趾诗。
NaN
NaN
是 JavaScript 的特殊值,表示“非數(shù)字”(Not a Number)蹬蚁,主要出現(xiàn)在將字符串解析成數(shù)字出錯(cuò)的場合恃泪。
字符串
由單雙引號(hào)包裹在一起的字符,就是字符串犀斋。
單引號(hào)字符串的內(nèi)部贝乎,可以使用雙引號(hào)。雙引號(hào)字符串的內(nèi)部叽粹,可以使用單引號(hào)览效。
'abc' "abc" "'a'" // 字符串
// 字符串換行
var str = 'String \
String \
String';
轉(zhuǎn)義符:
-
\0
:null(\u0000
) -
\b
:后退鍵(\u0008
) -
\f
:換頁符(\u000C
) -
\n
:換行符(\u000A
) -
\r
:回車鍵(\u000D
) -
\t
:制表符(\u0009
) -
\v
:垂直制表符(\u000B
) -
\'
:單引號(hào)(\u0027
) -
\"
:雙引號(hào)(\u0022
) -
\\
:反斜杠(\u005C
)
字符集:javaScript 使用 Unicode 字符集却舀。JavaScript 引擎內(nèi)部,所有字符都用 Unicode 表示锤灿。
對(duì)象
var obj = { // 對(duì)象聲明
a: '1',
b: '2'
};
// 對(duì)象屬性讀取
obj.a
obj['a']
// 刪除對(duì)象屬性
delete obj.a
// 判斷屬性是否存在
'a' in obj
//對(duì)象遍歷
for (var i in obj) {
console.log('鍵名:', i);
console.log('鍵值:', obj[i]);
}
函數(shù)
function 關(guān)鍵字聲明挽拔。
function foo(s) {
console.log(s);
}
// 表達(dá)式形式
var foo = function(s) {
console.log(s);
};
Function 構(gòu)造函數(shù)
var add = new Function(
'x',
'y',
'return x + y'
);
// 等同于
function add(x, y) {
return x + y;
}
函數(shù)名提升:JavaScript 引擎將函數(shù)名視同變量名,所以采用function
命令聲明函數(shù)時(shí)但校,整個(gè)函數(shù)會(huì)像變量聲明一樣螃诅,被提升到代碼頭部。
foo();
function foo() {console('ok')}
JavaScript函數(shù)知識(shí)點(diǎn)還是蠻多的状囱,后面針對(duì)函數(shù)這一塊單獨(dú)整理术裸。
數(shù)組
數(shù)組屬于一種特殊的對(duì)象。
typeof [1, 2, 3] // "object"
length:JavaScript 使用一個(gè)32位整數(shù)浪箭,保存數(shù)組的元素個(gè)數(shù)穗椅。這意味著,數(shù)組成員最多只有 4294967295 個(gè)(2^32 - 1)個(gè)奶栖,也就是說length
屬性的最大值就是 4294967295匹表。
數(shù)組遍歷
var a = [1, 2, 3];
for (var i in a) {
console.log(a[i]);
}
小結(jié)
本文要點(diǎn)回顧,歡迎留言交流宣鄙。
- JavaScript介紹袍镀。
- JavaScript基本語法。
- 數(shù)據(jù)類型冻晤。