<ul id="qxxfc"><fieldset id="qxxfc"><tr id="qxxfc"></tr></fieldset></ul>


      JavaScript 簡(jiǎn)介

      我們一起來聊一下 JavaScript,用它能做什么,它有哪些特性,以及一些跟它配合使用的技術(shù)。

      什么是 JavaScript?

      JavaScript 最初的目的是為了“賦予網(wǎng)頁生命”。

      這種編程語言我們稱之為腳本。它們可以寫在 HTML 中,在頁面加載的時(shí)候會(huì)自動(dòng)執(zhí)行。

      腳本作為純文本存在和執(zhí)行。它們不需要特殊的準(zhǔn)備或編譯即可運(yùn)行。

      這方面,JavaScript 和 Java <http://en.wikipedia.org/wiki/Java> 有很大的區(qū)別。

      為什么叫 JavaScript?

      JavaScript 在剛誕生的時(shí)候,它的名字叫 “LiveScript”。但是因?yàn)楫?dāng)時(shí) Java 很流行,所以決定將一種新語言定位為 Java
      的“弟弟”會(huì)有助于它的流行。

      隨著 JavaScript 的發(fā)展,它已經(jīng)變成了一門獨(dú)立的語言,同時(shí)也有了自己的語言規(guī)范 ECMAScript
      <http://en.wikipedia.org/wiki/ECMAScript>?,F(xiàn)在,它和 Java 之間沒有任何關(guān)系。

      現(xiàn)在,JavaScript 不僅僅是在瀏覽器內(nèi)執(zhí)行,也可以在服務(wù)端執(zhí)行,甚至還能在任意搭載了 JavaScript 引擎
      <https://en.wikipedia.org/wiki/JavaScript_engine> 的設(shè)備中都可以執(zhí)行。

      瀏覽器中嵌入了 JavaScript 引擎,有時(shí)也稱作 JavaScript 虛擬機(jī)。

      不同的引擎有不同的“代號(hào)”,例如:

      * V8 <https://en.wikipedia.org/wiki/V8_(JavaScript_engine)> —— Chrome 和 Opera
      中的 JavaScript 引擎。
      * SpiderMonkey <https://en.wikipedia.org/wiki/SpiderMonkey> —— Firefox 中的
      JavaScript 引擎。
      * ……還有其他一些代號(hào),像“Trident”,“Chakra”用于不同版本的 IE,“ChakraCore”用于 Microsoft
      Edge,“Nitro”和“SquirrelFish”用于 Safari,等等。
      上面這些名稱很容易記憶,因?yàn)榻?jīng)常出現(xiàn)在網(wǎng)上開發(fā)者的文章中。我們也會(huì)用到這些名稱。例如:某個(gè)新的功能,如果“JavaScript 引擎 V8
      是支持的”,那么我們可以認(rèn)為這個(gè)功能大概能在 Chrome 和 Opera 中正常運(yùn)行。

      引擎是如何工作的?

      引擎很復(fù)雜,但是基本原理很簡(jiǎn)單。

      * 引擎(通常嵌入在瀏覽器中)讀?。ā敖馕觥保┠_本。
      * 然后將腳本轉(zhuǎn)化(“編譯”)為機(jī)器語言。
      * 然后這機(jī)器語言代碼快速地運(yùn)行。
      引擎會(huì)對(duì)流程中的每個(gè)階段都進(jìn)行優(yōu)化。它甚至可以在運(yùn)行時(shí)監(jiān)視編譯的腳本,分析數(shù)據(jù)流并根據(jù)這些對(duì)機(jī)器代碼應(yīng)用優(yōu)化。最后,腳本會(huì)執(zhí)行地非??臁?br>
      瀏覽器中的 JavaScript 能做什么?

      現(xiàn)代的 JavaScript 是一種“安全”語言。它不提供對(duì)內(nèi)存或 CPU 的底層訪問,因?yàn)樗畛跏菫闉g覽器創(chuàng)建的,不需要這些功能。

      JavaScript 的能力很大程度上依賴于它執(zhí)行的環(huán)境。例如:Node.js <https://wikipedia.org/wiki/Node.js>
      允許 JavaScript 讀寫任意文件、執(zhí)行網(wǎng)絡(luò)請(qǐng)求等。

      瀏覽器中的 JavaScript 可以做與網(wǎng)頁操作、用戶交互和 Web 服務(wù)器相關(guān)的所有事情。

      例如,瀏覽器中的 JavaScript 可以完成下面這些事:

      * 在網(wǎng)頁中插入新的 HTML,修改現(xiàn)有的網(wǎng)頁內(nèi)容和網(wǎng)頁的樣式。
      * 響應(yīng)用戶的行為,響應(yīng)鼠標(biāo)的點(diǎn)擊或移動(dòng)、鍵盤的敲擊。
      * 向遠(yuǎn)程服務(wù)器發(fā)送網(wǎng)絡(luò)請(qǐng)求,下載或上傳文件(所謂 AJAX
      <https://en.wikipedia.org/wiki/Ajax_(programming)> 和 COMET
      <https://en.wikipedia.org/wiki/Comet_(programming)> 技術(shù))。
      * 獲取或修改 cookie,向訪問者提出問題、發(fā)送消息。
      * 記住客戶端的數(shù)據(jù)(本地存儲(chǔ))。
      瀏覽器中的 JavaScript 不能做什么?

      為了用戶的(信息)安全,在瀏覽器中的 JavaScript 的能力是有限的。這樣主要是為了阻止邪惡的網(wǎng)站獲得或修改用戶的私人數(shù)據(jù)。

      這些限制的例子有:

      *
      網(wǎng)頁中的 JavaScript 不能讀、寫、復(fù)制及執(zhí)行用戶磁盤上的文件或程序。它沒有直接訪問操作系統(tǒng)的功能。

      現(xiàn)代瀏覽器允許 JavaScript 做一些文件相關(guān)的操作,但是這個(gè)操作是受到限制的。僅當(dāng)用戶使用某個(gè)特定的動(dòng)作,JavaScript
      才能操作這個(gè)文件。例如,把文件“拖”到瀏覽器中,或者通過<input> 標(biāo)簽選擇文件。

      JavaScript 有很多方式和照相機(jī)/麥克風(fēng)或者其他設(shè)備進(jìn)行交互,但是這些都需要提前獲得用戶的授權(quán)許可。所以,啟用了 JavaScript
      的網(wǎng)頁應(yīng)該不會(huì)偷偷地啟動(dòng)網(wǎng)絡(luò)攝像頭觀察你,并把你的信息發(fā)送到美國(guó)國(guó)家安全局
      <https://en.wikipedia.org/wiki/National_Security_Agency>。

      *
      不同的瀏覽器標(biāo)簽頁之間基本彼此不相關(guān)。有時(shí)候,也會(huì)有一些關(guān)系。例如,一個(gè)標(biāo)簽頁通過 JavaScript
      打開另外一個(gè)新的標(biāo)簽頁。但即使在這種情況下,如果兩個(gè)標(biāo)簽頁打開的不是同一個(gè)網(wǎng)站(域名、協(xié)議或者端口任一不相同的網(wǎng)站),他們都不能夠相互通信。

      這就是“同源策略”。為了解決“同源策略”問題,兩個(gè)標(biāo)簽頁必須都包含一些處理這個(gè)問題的特殊的 JavaScript
      代碼,并均允許數(shù)據(jù)交換,這樣才能夠?qū)崿F(xiàn)兩個(gè)同源標(biāo)簽頁的數(shù)據(jù)交換。本教程會(huì)講到這部分相關(guān)的知識(shí)。

      這個(gè)限制也是為了用戶的信息安全。例如,用戶打開的 http://anysite.com 網(wǎng)頁的 JavaScript 肯定不能訪問
      http://gmail.com(另外一個(gè)標(biāo)簽頁打開的網(wǎng)頁)也不能從那里竊取信息。

      *
      JavaScript
      通過互聯(lián)網(wǎng)可以輕松地和當(dāng)前網(wǎng)頁域名的服務(wù)器進(jìn)行通訊。但是從其他網(wǎng)站/域名的服務(wù)器中獲取數(shù)據(jù)的能力是受限的。盡管這可以實(shí)現(xiàn),但是需要來自遠(yuǎn)程服務(wù)器的明確協(xié)議(在
      HTTP 頭中)。這也是為了用戶的數(shù)據(jù)安全。



      瀏覽器環(huán)境外的 JavaScript 一般沒有這些限制。例如服務(wù)端的 JavaScript
      就沒有這些限制?,F(xiàn)代瀏覽器還允許安裝可能會(huì)要求擴(kuò)展權(quán)限的插件或擴(kuò)展。

      是什么使得 JavaScript 與眾不同?

      至少有 3 件事值得一提:
      + 和 HTML/CSS 完全的集成。 + 使用簡(jiǎn)單的工具完成簡(jiǎn)單的任務(wù)。 + 被所有的主流瀏覽器支持,并且默認(rèn)開啟。
      滿足這三條的瀏覽器技術(shù)也只有 JavaScript 了。

      這就是為什么 JavaScript 與眾不同!這也是為什么它是創(chuàng)建瀏覽器界面的最普遍的工具。

      此外,JavaScript 還支持創(chuàng)建服務(wù)器,移動(dòng)端應(yīng)用程序等。

      比 JavaScript “更好”的語言

      不同的人喜歡不同的功能,JavaScript 的語法也不能夠滿足所有人的需求。

      這是正常的,因?yàn)槊總€(gè)人的項(xiàng)目和需求都不一樣。

      所以,最近出現(xiàn)了很多不同的語言,這些語言在瀏覽器中執(zhí)行之前,都會(huì)被編譯(轉(zhuǎn)化)成 JavaScript。

      現(xiàn)代化的工具使得編譯速度非??焖偾彝该?,實(shí)際上允許開發(fā)人員使用另一種語言編寫代碼并將其自動(dòng)轉(zhuǎn)換為 JavaScript。

      這些編程語言的例子有:

      * CoffeeScript <http://coffeescript.org/> 是 JavaScript 的語法糖,它語法簡(jiǎn)短,明確簡(jiǎn)潔。通常使用
      Ruby 的人喜歡用。
      * TypeScript <http://www.typescriptlang.org/>
      將注意力集中在增加嚴(yán)格的數(shù)據(jù)類型。這樣就能簡(jiǎn)化開發(fā),也能用于開發(fā)復(fù)雜的系統(tǒng)。TypeScript 是微軟開發(fā)的。
      * Flow <http://flow.org/> 也添加了數(shù)據(jù)類型,但是以一種不同的方式。由 Facebook 開發(fā)。
      * Dart <https://www.dartlang.org/>
      是一門獨(dú)立的語言。它擁有自己的引擎用于在非瀏覽器環(huán)境中運(yùn)行(如:手機(jī)應(yīng)用),它也能被編譯成 JavaScript 。由 Google 開發(fā)。
      還有很多其他的語言。當(dāng)然,即使我們?cè)谑褂眠@些語言,我們也需要知道 JavaScript。因?yàn)閷W(xué)習(xí) JavaScript 可以讓我們真正明白我們自己在做什么。

      總結(jié)

      * JavaScript 最開始是為瀏覽器設(shè)計(jì)的一門語言,但是現(xiàn)在也被用于很多其他的環(huán)境。
      * 現(xiàn)在,JavaScript 是一門在瀏覽器中使用最廣、并且能夠很好集成 HTML/CSS 的語言。
      * 有很多其他的語言可以被編譯成 JavaScript,這些語言還提供了更多的功能。最好還是了解一下這些語言,至少在掌握了 JavaScript
      之后簡(jiǎn)單地看一下。
      現(xiàn)代 JavaScript 教程:開源的現(xiàn)代 JavaScript 入門到進(jìn)階的優(yōu)質(zhì)教程。

      在線免費(fèi)閱讀:http://zh.javascript.info/ <http://zh.javascript.info/>

      關(guān)注微信公眾號(hào)「技術(shù)漫談」,訂閱更多精彩內(nèi)容。


      友情鏈接
      ioDraw流程圖
      API參考文檔
      OK工具箱
      云服務(wù)器優(yōu)惠
      阿里云優(yōu)惠券
      騰訊云優(yōu)惠券
      京東云優(yōu)惠券
      站點(diǎn)信息
      問題反饋
      郵箱:[email protected]
      QQ群:637538335
      關(guān)注微信

        <ul id="qxxfc"><fieldset id="qxxfc"><tr id="qxxfc"></tr></fieldset></ul>
          亚洲一二三菠萝蜜 | 日本无码操逼视频 | 在线观看黄色国产 | 总裁掀开她的内衣揉她的柔软视频 | 高清欧美性猛交XXX | 熟女色色 | 色五月婷婷小说 | 免费人成精品欧美精品 | 嗯嗯嗯啊啊啊啊视频 | 日韩中文字幕视频 |