一起來聊一下 JavaScript 的用途和那些特性
JavaScript 簡介
我們一起來聊一下 JavaScript,用它能做什麼,它有哪些特性,以及一些跟它配合使用的技術。
什麼是 JavaScript?
JavaScript 最初的目的是為了“賦予網頁生命”。
這種程式語言我們稱之為指令碼。它們可以寫在 HTML 中,在頁面載入的時候會自動執行。
指令碼作為純文字存在和執行。它們不需要特殊的準備或編譯即可執行。
這方面,JavaScript 和 Java 有很大的區別。
為什麼叫 JavaScript?
JavaScript 在剛誕生的時候,它的名字叫 “LiveScript”。但是因為當時 Java 很流行,所以決定將一種新語言定位為 Java 的“弟弟”會有助於它的流行。
隨著 JavaScript 的發展,它已經變成了一門獨立的語言,同時也有了自己的語言規範 ECMAScript。現在,它和 Java 之間沒有任何關係。
現在,JavaScript 不僅僅是在瀏覽器內執行,也可以在服務端執行,甚至還能在任意搭載了 JavaScript 引擎 的裝置中都可以執行。
瀏覽器中嵌入了 JavaScript 引擎,有時也稱作 JavaScript 虛擬機器。
不同的引擎有不同的“代號”,例如:
- V8 —— Chrome 和 Opera 中的 JavaScript 引擎。
- SpiderMonkey —— Firefox 中的 JavaScript 引擎。
- ……還有其他一些代號,像“Trident”,“Chakra”用於不同版本的 IE,“ChakraCore”用於 Microsoft Edge,“Nitro”和“SquirrelFish”用於 Safari,等等。
上面這些名稱很容易記憶,因為經常出現在網上開發者的文章中。我們也會用到這些名稱。例如:某個新的功能,如果“JavaScript 引擎 V8 是支援的”,那麼我們可以認為這個功能大概能在 Chrome 和 Opera 中正常執行。
引擎是如何工作的?
引擎很複雜,但是基本原理很簡單。
- 引擎(通常嵌入在瀏覽器中)讀取(“解析”)指令碼。
- 然後將指令碼轉化(“編譯”)為機器語言。
- 然後這機器語言程式碼快速地執行。
引擎會對流程中的每個階段都進行優化。它甚至可以在執行時監視編譯的指令碼,分析資料流並根據這些對機器程式碼應用優化。最後,指令碼會執行地非常快。
瀏覽器中的 JavaScript 能做什麼?
現代的 JavaScript 是一種“安全”語言。它不提供對記憶體或 CPU 的底層訪問,因為它最初是為瀏覽器建立的,不需要這些功能。
JavaScript 的能力很大程度上依賴於它執行的環境。例如:Node.js 允許 JavaScript 讀寫任意檔案、執行網路請求等。
瀏覽器中的 JavaScript 可以做與網頁操作、使用者互動和 Web 伺服器相關的所有事情。
例如,瀏覽器中的 JavaScript 可以完成下面這些事:
- 在網頁中插入新的 HTML,修改現有的網頁內容和網頁的樣式。
- 響應使用者的行為,響應滑鼠的點選或移動、鍵盤的敲擊。
- 向遠端伺服器傳送網路請求,下載或上傳檔案(所謂 AJAX 和 COMET 技術)。
- 獲取或修改 cookie,向訪問者提出問題、傳送訊息。
- 記住客戶端的資料(本地儲存)。
瀏覽器中的 JavaScript 不能做什麼?
為了使用者的(資訊)安全,在瀏覽器中的 JavaScript 的能力是有限的。這樣主要是為了阻止邪惡的網站獲得或修改使用者的私人資料。
這些限制的例子有:
網頁中的 JavaScript 不能讀、寫、複製及執行使用者磁碟上的檔案或程式。它沒有直接訪問作業系統的功能。
現代瀏覽器允許 JavaScript 做一些檔案相關的操作,但是這個操作是受到限制的。僅當用戶使用某個特定的動作,JavaScript 才能操作這個檔案。例如,把檔案“拖”到瀏覽器中,或者通過
<input>
標籤選擇檔案。JavaScript 有很多方式和照相機/麥克風或者其他裝置進行互動,但是這些都需要提前獲得使用者的授權許可。所以,啟用了 JavaScript 的網頁應該不會偷偷地啟動網路攝像頭觀察你,並把你的資訊傳送到美國國家安全域性。
不同的瀏覽器標籤頁之間基本彼此不相關。有時候,也會有一些關係。例如,一個標籤頁通過 JavaScript 開啟另外一個新的標籤頁。但即使在這種情況下,如果兩個標籤頁開啟的不是同一個網站(域名、協議或者埠任一不相同的網站),他們都不能夠相互通訊。
這就是“同源策略”。為了解決“同源策略”問題,兩個標籤頁必須都包含一些處理這個問題的特殊的 JavaScript 程式碼,並均允許資料交換,這樣才能夠實現兩個同源標籤頁的資料交換。本教程會講到這部分相關的知識。
這個限制也是為了使用者的資訊保安。例如,使用者開啟的
http://anysite.com
網頁的 JavaScript 肯定不能訪問http://gmail.com
(另外一個標籤頁開啟的網頁)也不能從那裡竊取資訊。JavaScript 通過網際網路可以輕鬆地和當前網頁域名的伺服器進行通訊。但是從其他網站/域名的伺服器中獲取資料的能力是受限的。儘管這可以實現,但是需要來自遠端伺服器的明確協議(在 HTTP 頭中)。這也是為了使用者的資料安全。
瀏覽器環境外的 JavaScript 一般沒有這些限制。例如服務端的 JavaScript 就沒有這些限制。現代瀏覽器還允許安裝可能會要求擴充套件許可權的外掛或擴充套件。
是什麼使得 JavaScript 與眾不同?
至少有 3 件事值得一提:
+ 和 HTML/CSS 完全的整合。
+ 使用簡單的工具完成簡單的任務。
+ 被所有的主流瀏覽器支援,並且預設開啟。
滿足這三條的瀏覽器技術也只有 JavaScript 了。
這就是為什麼 JavaScript 與眾不同!這也是為什麼它是建立瀏覽器介面的最普遍的工具。
此外,JavaScript 還支援建立伺服器,移動端應用程式等。
比 JavaScript “更好”的語言
不同的人喜歡不同的功能,JavaScript 的語法也不能夠滿足所有人的需求。
這是正常的,因為每個人的專案和需求都不一樣。
所以,最近出現了很多不同的語言,這些語言在瀏覽器中執行之前,都會被編譯(轉化)成 JavaScript。
現代化的工具使得編譯速度非常快速且透明,實際上允許開發人員使用另一種語言編寫程式碼並將其自動轉換為 JavaScript。
這些程式語言的例子有:
- CoffeeScript 是 JavaScript 的語法糖,它語法簡短,明確簡潔。通常使用 Ruby 的人喜歡用。
- TypeScript 將注意力集中在增加嚴格的資料型別。這樣就能簡化開發,也能用於開發複雜的系統。TypeScript 是微軟開發的。
- Flow 也添加了資料型別,但是以一種不同的方式。由 Facebook 開發。
- Dart 是一門獨立的語言。它擁有自己的引擎用於在非瀏覽器環境中執行(如:手機應用),它也能被編譯成 JavaScript 。由 Google 開發。
還有很多其他的語言。當然,即使我們在使用這些語言,我們也需要知道 JavaScript。因為學習 JavaScript 可以讓我們真正明白我們自己在做什麼。
總結
- JavaScript 最開始是為瀏覽器設計的一門語言,但是現在也被用於很多其他的環境。
- 現在,JavaScript 是一門在瀏覽器中使用最廣、並且能夠很好整合 HTML/CSS 的語言。
- 有很多其他的語言可以被編譯成 JavaScript,這些語言還提供了更多的功能。最好還是瞭解一下這些語言,至少在掌握了 JavaScript 之後簡單地看一下。
現代 JavaScript 教程:開源的現代 JavaScript 入門到進階的優質教程。
線上免費閱讀:http://zh.javascript.info/
關注微信公眾號「技術漫談」,訂閱更多精彩內容。
相關推薦
一起來聊一下 JavaScript 的用途和那些特性
JavaScript 簡介 我們一起來聊一下 JavaScript,用它能做什麼,它有哪些特性,以及一些跟它配合使用的技術。 什麼是 JavaScript? JavaScript 最初的目的是為了“賦予網頁生命”。 這種程式語言我們稱之為指令碼。它們可以寫在 HTML 中,在頁面載入的時候會自動執行。 指令碼
系列:這一件月薪30K+的事,我們一起來撮合一下 3
作者:接地氣的陳老師 -------------------------------------------------------------------------------------------------------- 這是陳老師《如何找到自己的第一個資料分
大家一起來分析一下這個SQL
今年工作遇到這樣一個問題,公司上不了網,自己寫了一下。SQL的形式大概是下面的形式。select * from (select c1, c2 from table1union allselect c1, c2 from
【轉載】聊一聊C#的Equals()和GetHashCode()方法
table rule != tle 繼承 操作符 內存 png blog 首先先談一下Equals()這個方法: Equals()方法,來自於Object,是我們經常需要重寫的方法。此方法的默認實現大概是這樣的: public virtual bool Equals(obj
linux需要裝?那就和我一起來配置一個動態的MOTD登陸效果吧
網址 描述 signature cti info 制作 退出 分享 rep 說到motd,熟悉linux系統的同學應該熟悉,motd它是linux系統上的一個普通的文件,在linux系統上的/etc/motd文件 .作用於:每次系統需要登陸時,通過終端展示一些消息給登陸用戶
( 轉 ) 聊一聊C#的Equals()和GetHashCode()方法
不同 持久性 自己 今天 特殊 周期 htm type eth 博客創建一年多,還是第一次寫博文,有什麽不對的地方還請多多指教。 關於這次寫的內容可以說是老生長談,百度一搜一大堆。大神可自行繞路。 最近在看Jeffrey Richter的CLR Via C#,在看到Get
碼易和您聊軟件定制那些事兒
情況 圖片 那些事兒 src 針對 可能 交付 為我 geek 碼易眾包平臺,高質量軟件交付和交易的互聯網服務平臺。今天,碼易和您聊聊軟件定制的那些事兒。 首先,軟件定制呢,百度百科的解釋:軟件定制,可根據客戶的需求,量身定制一系列符合客戶實際應用的軟件。本人的理解:定呢
WPF 程序無法觸摸操作?我們一起來找原因和解決方法!
line 坐標 團隊 github webkit pro rgba alter 徹底 原文:WPF 程序無法觸摸操作?我們一起來找原因和解決方法! 版權聲明:本作品采用知識共享署名-非商業性使用-相同方式共享 4.0 國際許可協議進行許可。歡
工作那些事(十一)談談碼農與農民工區別和發展之路 工作那些事(十二)如果哪一天,沒有了電腦 工作那些事(十三)再次失業
工作那些事系列連結快速通道,不斷更新中: 工作那些事(一)今年工作不好找 工作那些事(二)應聘時填寫個人資訊ABCD 工作那些事(三)什麼樣的公司能吸引你,什麼樣的公司適合你? 工作那些事(四)大公司VS小公司 工作那些事(五)談談專案資料整理和積累 工作那些事(六)談談
初學第一日struts2專案搭建過程--萌新們一起來學習交流一下吧
初學第一日struts2專案搭建過程 1:新建一個普通的javawe## 標題b專案(建立的步驟很簡單就貼一張建立好的圖) 2:新建檢視層 jsp頁面(可以新建兩個jsp頁面,註冊和顯示頁面) 3:新建一個控制層 RegisterAction 類 4:在web-info 下的li
JavaScript複習筆記(一)變數、資料型別和運算子
1、JavaScript用來做什麼 HTML:專門編寫網頁內容的語言 CSS:專門美化網頁內容樣式的語言 JavaScript:專門編寫互動程式的語言 JavaScript包含三個方面:ECMAScript標準+DOM標準+BOM 2、常用語句 在控制檯中輸出一段話 &nbs
福利!NodeJs爬取網路教程並生成PDF檔案,以阮一峰JavaScript教程和ES6教程為例(附原始碼和PDF檔案)
前言 你想一夜暴富嗎?你想一夜成名嗎?你想開蘭博基尼泡妞嗎?你想拿鈔票點菸嗎?你想成為世界主宰嗎?那麼,趕緊往下看吧,雖然它不能達成前面所說的任 何一個夢想,但是,你將獲得: 通過命令列將某網站的內容轉成PDF檔案 通過NodeJS爬蟲將某網路教程(例如阮一峰的JavaScript教程和ES6教
2019年前端面試都聊啥?一起來看看
原文作者:Harshal PatilFollow 譯者:UC 國際研發 Jothy 寫在最前:歡迎你來到“UC國際技術”公眾號,我們將為大家提供與客戶端、服務端、演算法、測試、資料、前端等相關的高質量技術文章,不限於原創與翻譯。
一起來學大資料|秒懂Spring註解,艾特一下你就明白,這麼妙?
我們已經簡單學習了spring框架和使用傳統的方式對類方法注入屬性。但是這樣的注入屬性方式,在當前看來還是比較的麻煩,那麼我們現在使用的更好的方式是什麼呢? 今天帶大家來看spring的bean管理下的註解方式,讓程式碼再精簡一半。 註解介紹 我們知道spri
聊一下自助建站和模板網站代建的不同
市場上做網站的方式,目前分為:自助建站、模板網站代建以及定製建站。定製建站一般指的是你提供資料及需求給建站公司,讓其全部負責網站搭建。今天大家討論一下自助建站和模板網站的區別。 先了解一下自助建站和模板網站的定義: 自助建站:自己做網站。 模板網站:指的是你選擇某個網站(也可以從建
一文讀懂JavaScript和ECMAScript的區別
一文讀懂JavaScript和ECMAScript的區別 這篇文章代表了我目前對 JavaScript 和 ECMAScript 之間差異的理解。文章適合那些熟悉 JavaScript 但又想更加清楚地瞭解其與 ECMAScript、web 瀏覽器、Babel 等是何種關係的人。你還
一起來學JavaScript吧(JS兔子領進門)
首先我們學習一門語言呢不一要學習它的所有歷史,但是一定要知道它的使用基本規則。不要在最基礎的部分出錯。不過胡蘿貝還是帶你瞭解JavaScript的歷史吧。 1994年網景公司(Netscape)釋出了Navigator瀏覽器0.9版(只能用於瀏覽訊息,無法與訪問者進行互動)。為了
推薦一下github上一鍵集合的微信和支付寶支付
1.微信支付 接入流程: 主要幾個步驟: 1.統一下單(放在服務端,需要加密引數) 2.生成支付引數(放在服務端,需要生成簽名) 3.呼叫客戶端SDK發起支付 4.服務端非同步接收支付結果 2.支付寶支付 接入流程: 生成支付引數(放在服務端,需要生成簽名) 呼叫客戶端
一起來學GO語言--GO語言函式和方法
這篇部落格一起學習一下函式和方法,一般來說這兩個是一樣的,但是在GO語言裡面,我理解是函式就是能被呼叫的方法,沒有固定的繫結在那個型別上面,而方法是繫結在某個特定型別上的函式。這是我的理解,如有錯誤,請大家指正。下面我們先從函式起。 1、函式的多值返回 我們知道從map中
深入理解javascript作用域系列第五篇——一張圖理解執行環境和作用域
前面的話 對於執行環境(execution context)和作用域(scope)並不容易區分,甚至很多人認為它們就是一回事,只是高程和犀牛書關於作用域的兩種不同翻譯而已。但實際上,它們並不相同,卻相互糾纏在一起。本文先用一張圖開宗明義,然後進行術語的簡單解釋,最後根據圖示內容進行詳細說明 圖示