1.4.3JavaScript基礎(chǔ)

目錄

使用瀏覽器執(zhí)行前端 JavaScript

大多數(shù)瀏覽器通過 F12 可以調(diào)出調(diào)試窗口殉农,如圖所示。在調(diào)試窗口中可以執(zhí)行相關(guān)代碼夏哭。JS 是一種解釋性語言,由解釋器對(duì)代碼進(jìn)行解析品擎。

console.log("Hello World!")

[圖片上傳失敗...(image-686ed8-1561872071507)]

在瀏覽器中蛮原,會(huì)集成 JS 的解析引擎仰剿,不同的瀏覽器擁有不同的解析引擎创淡,這就使得 JS 的執(zhí)行在不同瀏覽器上有不同的解釋效果。

瀏覽器 引擎
IE/Edge Chakra
Firefox SpiderMonkey
Safari SFX
Chrome V8
Opera Carakan

嵌入在 HTML 中的 JS 代碼通常有以下幾種形式:

直接插入代碼塊
<script>console.log('Hello World!');</script>

加載外部 JS 文件
<script src="Hello.js"></script>

使用 HTML 標(biāo)簽中的事件屬性
<a href="javascript:alert('Hello')"></a>

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

作為弱類型的語言南吮,JS 的變量聲明不需要指定數(shù)據(jù)類型:

var pi=3.14;
var pi='ratio of the circumference of a circle to its diameter';

當(dāng)然琳彩,可以通過“ new ”來聲明變量類型:

var pi=new String;
var pi=new Number;
var pi=new Boolean;
var pi=new Array;
var pi=new Object;

上一個(gè)示例也展示了 JS 的數(shù)據(jù)類型,分別是字符串、數(shù)字露乏、布爾值碧浊、數(shù)組和對(duì)象。

有兩個(gè)特殊的類型是 Undefined 和 Null瘟仿,形象一點(diǎn)區(qū)分辉词,前者表示有坑在但坑中沒有值,后者表示沒有坑猾骡。另外,所有 JS 變量都是對(duì)象敷搪,但是需要注意的是兴想,對(duì)象聲明的字符串和直接賦值的字符串并不嚴(yán)格相等

JavaScript 編程邏輯

基礎(chǔ)

JS 語句使用分號(hào)分隔赡勘。

邏輯語句

if 條件語句:

if (condition)
{
  代碼塊
}
else
{
  代碼塊
}

switch 條件語句:

switch(n)
{
  case 1:
    代碼塊
    break;
  case 2:
    代碼塊
    break;
  default:
    代碼塊
}

for/for in 循環(huán)語句:

for (代碼1嫂便;代碼2;代碼3)
{
  代碼塊
}
for (x in xs)
{
  代碼塊
}

while/do while 循環(huán)語句:

while (條件)
{
  代碼塊
}
do
{
  代碼塊
}
while (條件);

JavaScript 打印數(shù)據(jù)

在瀏覽器中調(diào)試代碼時(shí)闸与,經(jīng)常用到的手段是打印變量毙替。

函數(shù) 作用
window.alert() 彈出警告框
document.write() 寫入HTML文檔
console.log() 寫入瀏覽器控制臺(tái)

[圖片上傳失敗...(image-bf23c3-1561872071507)]

[圖片上傳失敗...(image-902050-1561872071507)]

JavaScript 框架

JS 同樣有許多功能強(qiáng)大的框架。大多數(shù)的前端 JS 框架使用外部引用的方式將 JS 文件引入到正在編寫的文檔中践樱。

jQuery

jQuery 封裝了常用的 JS 功能厂画,通過選擇器的機(jī)制來操縱 DOM 節(jié)點(diǎn),完成復(fù)雜的前端效果展示拷邢。

Angular

實(shí)現(xiàn)了前端的 MVC 架構(gòu)袱院,通過動(dòng)態(tài)數(shù)據(jù)綁定來簡化數(shù)據(jù)轉(zhuǎn)遞流程。

React

利用組件來構(gòu)建前端UI的框架

Vue

MVVM 構(gòu)架的前端庫瞭稼,理論上講忽洛,將它定義為數(shù)據(jù)驅(qū)動(dòng)、組件化的框架环肘,但這些概念也可能適用于其他框架欲虚,所以可能只有去真正使用到所有框架才能領(lǐng)悟到它們之間的區(qū)別。

其他

還有許許多多針對(duì)不同功能的框架悔雹,比如針對(duì)圖表可視化复哆、網(wǎng)絡(luò)信息傳遞或者移動(dòng)端優(yōu)化等等。

雙向數(shù)據(jù)綁定

傳統(tǒng)基于 MVC 的架構(gòu)的思想是數(shù)據(jù)單向的傳送到 View 視圖中進(jìn)行顯示荠商,但是有時(shí)我們還需要將視圖層的數(shù)據(jù)傳輸回模型層寂恬,這部分的功能就由前端 JS 來接手,因此許多近幾年出現(xiàn)的新框架都使用數(shù)據(jù)雙向綁定來完成MVVM的新構(gòu)架莱没,這就帶給了用戶更多的權(quán)限接觸到程序的編程邏輯初肉,進(jìn)而產(chǎn)生一些安全問題,比較典型的就是許多框架曾經(jīng)存在的模板注入問題饰躲。

JavaScript DOM 和 BOM

DOM 文檔對(duì)象模型牙咏,JS 通過操縱 DOM 可以動(dòng)態(tài)獲取臼隔、修改 HTML 中的元素、屬性妄壶、CSS 樣式摔握,這種修改有時(shí)會(huì)帶來 XSS 攻擊風(fēng)險(xiǎn)
BOM 瀏覽器對(duì)象模型,類比于 DOM丁寄,賦予 JS 對(duì)瀏覽器本身進(jìn)行有限的操縱氨淌,獲取 Cookie、地理位置伊磺、系統(tǒng)硬件或?yàn)g覽器插件信息等

JavaScript 混淆

由于前端代碼的可見性盛正,出于知識(shí)產(chǎn)權(quán)或者其他目的,JS 代碼通過混淆的方法使得自己既能被瀏覽器執(zhí)行屑埋,又難以被人為解讀豪筝。常見的混淆方法有重命名變量名和函數(shù)名、擠壓代碼摘能、拼接字符续崖、使用動(dòng)態(tài)執(zhí)行函數(shù)在函數(shù)與字符串之間進(jìn)行替換等。下面對(duì)比代碼混淆前后的差異团搞。

混淆前:

console.log('Hello World!');

混淆后:

console["\x6c\x6f\x67"]('\x48\x65\x6c\x6c\x6f \x57\x6f\x72\x6c\x64\x21');

更加復(fù)雜的混淆后:

eval(function(p,a,c,k,e,d){e=function(c){return(c<a?"":e(parseInt(c/a)))+((c=c%a)>35?String.fromCharCode(c+29):c.toString(36))};if(!''.replace(/^/,String)){while(c--)d[e(c)]=k[c]||e(c);k=[function(e){return d[e]}];e=function(){return'\\w+'};c=1;};while(c--)if(k[c])p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c]);return p;}('1.0(\'3 2!\');',4,4,'log|console|World|Hello'.split('|'),0,{}))

由于之前提到的特性严望,無論混淆有多么復(fù)雜,最終它都能夠在瀏覽器中被解釋執(zhí)行逻恐。

使用 Node.js 執(zhí)行后端 JavaScript

安裝完成 Node.js 后著蟹,我們可以嘗試編寫第一個(gè)后端 JS 程序。

1.打開文本編輯器梢莽,寫入

console.log("Hello World");

并保存為 hello.js

2.使用

node hello.js

來執(zhí)行文件萧豆。

[圖片上傳失敗...(image-10fbae-1561872071507)]

Node.js 模塊

Node.js 同樣通過豐富的模塊提供強(qiáng)大的功能,模塊使用 npm 進(jìn)行管理昏名。

  • events:事件模塊涮雷,提供事件觸發(fā)和事件監(jiān)聽功能
  • util:核心功能模塊,用于彌補(bǔ)核心 JS 功能的不足
  • fs:文件操作模塊轻局,提供文件操作 API
  • http:Web 協(xié)議模塊洪鸭,提供 Web 協(xié)議交互功能
  • express:Web 框架,用于快速構(gòu)建 Web 應(yīng)用服務(wù)
  • vm:沙箱模塊仑扑,提供干凈的上下文環(huán)境

后端 JS 就會(huì)存在其他語言后端所同樣存在安全問題览爵,包括基礎(chǔ)的 Web 攻擊、服務(wù)端模板注入镇饮、沙箱逃逸蜓竹、內(nèi)存溢出等問題。

參考資料

來源:GitHub

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市俱济,隨后出現(xiàn)的幾起案子嘶是,更是在濱河造成了極大的恐慌,老刑警劉巖蛛碌,帶你破解...
    沈念sama閱讀 211,290評(píng)論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件聂喇,死亡現(xiàn)場離奇詭異,居然都是意外死亡蔚携,警方通過查閱死者的電腦和手機(jī)希太,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,107評(píng)論 2 385
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來酝蜒,“玉大人跛十,你說我怎么就攤上這事★跸酰” “怎么了?”我有些...
    開封第一講書人閱讀 156,872評(píng)論 0 347
  • 文/不壞的土叔 我叫張陵洲尊,是天一觀的道長远豺。 經(jīng)常有香客問我,道長坞嘀,這世上最難降的妖魔是什么躯护? 我笑而不...
    開封第一講書人閱讀 56,415評(píng)論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮丽涩,結(jié)果婚禮上棺滞,老公的妹妹穿的比我還像新娘。我一直安慰自己矢渊,他們只是感情好继准,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,453評(píng)論 6 385
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著矮男,像睡著了一般移必。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上毡鉴,一...
    開封第一講書人閱讀 49,784評(píng)論 1 290
  • 那天崔泵,我揣著相機(jī)與錄音,去河邊找鬼猪瞬。 笑死憎瘸,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的陈瘦。 我是一名探鬼主播幌甘,決...
    沈念sama閱讀 38,927評(píng)論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了含潘?” 一聲冷哼從身側(cè)響起饲做,我...
    開封第一講書人閱讀 37,691評(píng)論 0 266
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎遏弱,沒想到半個(gè)月后盆均,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,137評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡漱逸,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,472評(píng)論 2 326
  • 正文 我和宋清朗相戀三年泪姨,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片饰抒。...
    茶點(diǎn)故事閱讀 38,622評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡肮砾,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出袋坑,到底是詐尸還是另有隱情仗处,我是刑警寧澤,帶...
    沈念sama閱讀 34,289評(píng)論 4 329
  • 正文 年R本政府宣布枣宫,位于F島的核電站婆誓,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏也颤。R本人自食惡果不足惜洋幻,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,887評(píng)論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望翅娶。 院中可真熱鬧文留,春花似錦、人聲如沸竭沫。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,741評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽蜕提。三九已至权旷,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間贯溅,已是汗流浹背拄氯。 一陣腳步聲響...
    開封第一講書人閱讀 31,977評(píng)論 1 265
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留它浅,地道東北人译柏。 一個(gè)月前我還...
    沈念sama閱讀 46,316評(píng)論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像姐霍,于是被迫代替她去往敵國和親鄙麦。 傳聞我的和親對(duì)象是個(gè)殘疾皇子典唇,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,490評(píng)論 2 348

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