前端-JavaScript基礎(chǔ)知識(shí)

簡介

什么是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)超出了瀏覽器寓搬。

  1. 瀏覽器平臺(tái)珍昨。HTML5的出現(xiàn),瀏覽器本身的功能越來越強(qiáng)句喷,JavaScript 因此得以調(diào)用許多系統(tǒng)功能镣典,如操作本地文件、操作圖片唾琼、調(diào)用攝像頭和麥克風(fēng)兄春,可以開發(fā)更多富客戶端產(chǎn)品。
  2. 服務(wù)端應(yīng)用锡溯。node的出現(xiàn)使得 JavaScript 可以用于開發(fā)服務(wù)器端應(yīng)用赶舆,也使得JavaScript成為一門可以同時(shí)開發(fā)前后端的語言。
  3. 移動(dòng)應(yīng)用趾唱。js也正在成為手機(jī)應(yīng)用的開發(fā)語言涌乳,比如:React Native 項(xiàng)目則是將 JavaScript 寫的組件,編譯成原生組件甜癞。
  4. 桌面應(yīng)用夕晓。JavaScript甚至可以開發(fā)桌面應(yīng)用,比如electronjs悠咱。
  5. 數(shù)據(jù)庫操作蒸辆。在一些Nosql數(shù)據(jù)都是支持JavaScript作為操作語言,像mongodb析既。

基本語法

變量

變量是對(duì)值的引用躬贡,JavaScript 的變量名區(qū)分大小寫,Aa是兩個(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)制:有前綴0o0O的數(shù)值度陆,或者有前導(dǎo)0艾凯、且只用到0-7的八個(gè)阿拉伯?dāng)?shù)字的數(shù)值。
  • 十六進(jìn)制:有前綴0x0X的數(shù)值懂傀。
  • 二進(jìn)制:有前綴0b0B的數(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ù)類型冻晤。
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末苇羡,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子鼻弧,更是在濱河造成了極大的恐慌设江,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,427評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件攘轩,死亡現(xiàn)場離奇詭異叉存,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)度帮,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,551評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門歼捏,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人笨篷,你說我怎么就攤上這事瞳秽。” “怎么了率翅?”我有些...
    開封第一講書人閱讀 165,747評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵练俐,是天一觀的道長。 經(jīng)常有香客問我冕臭,道長痰洒,這世上最難降的妖魔是什么瓢棒? 我笑而不...
    開封第一講書人閱讀 58,939評(píng)論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮丘喻,結(jié)果婚禮上脯宿,老公的妹妹穿的比我還像新娘。我一直安慰自己泉粉,他們只是感情好突硝,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,955評(píng)論 6 392
  • 文/花漫 我一把揭開白布肌蜻。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪仙辟。 梳的紋絲不亂的頭發(fā)上温学,一...
    開封第一講書人閱讀 51,737評(píng)論 1 305
  • 那天乳愉,我揣著相機(jī)與錄音送挑,去河邊找鬼。 笑死哈误,一個(gè)胖子當(dāng)著我的面吹牛哩至,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播蜜自,決...
    沈念sama閱讀 40,448評(píng)論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼菩貌,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了重荠?” 一聲冷哼從身側(cè)響起箭阶,我...
    開封第一講書人閱讀 39,352評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎戈鲁,沒想到半個(gè)月后仇参,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,834評(píng)論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡婆殿,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,992評(píng)論 3 338
  • 正文 我和宋清朗相戀三年诈乒,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片鸣皂。...
    茶點(diǎn)故事閱讀 40,133評(píng)論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖暮蹂,靈堂內(nèi)的尸體忽然破棺而出寞缝,到底是詐尸還是另有隱情,我是刑警寧澤仰泻,帶...
    沈念sama閱讀 35,815評(píng)論 5 346
  • 正文 年R本政府宣布荆陆,位于F島的核電站,受9級(jí)特大地震影響集侯,放射性物質(zhì)發(fā)生泄漏被啼。R本人自食惡果不足惜帜消,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,477評(píng)論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望浓体。 院中可真熱鬧泡挺,春花似錦、人聲如沸命浴。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,022評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽生闲。三九已至媳溺,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間碍讯,已是汗流浹背悬蔽。 一陣腳步聲響...
    開封第一講書人閱讀 33,147評(píng)論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留捉兴,地道東北人蝎困。 一個(gè)月前我還...
    沈念sama閱讀 48,398評(píng)論 3 373
  • 正文 我出身青樓,卻偏偏與公主長得像轴术,于是被迫代替她去往敵國和親难衰。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,077評(píng)論 2 355

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