1,JavaScript前世今生

来源:https://www.cnblogs.com/liu-zhijun/archive/2019/03/27/10611119.html
-Advertisement-
Play Games

JavaScript歷史大概在1992年,一家稱作Nombas的公司開始開發一種叫做C–(C-minus-minus,簡稱Cmm)的嵌入式腳本語言。 Cmm背後的理念很簡單:一個足夠強大可以替代巨集操作(macro)的腳本語言,同時保持與C(和C++)中夠的相似性,以便開發人員能很快學會。 這個腳本語 ...


JavaScript歷史
大概在1992年,一家稱作Nombas的公司開始開發一種叫做C–(C-minus-minus,簡稱Cmm)的嵌入式腳本語言。 Cmm背後的理念很簡單:一個足夠強大可以替代巨集操作(macro)的腳本語言,同時保持與C(和C++)中夠的相似性,以便開發人員能很快學會。 這個腳本語言捆綁在一個叫做CEnvi的共用軟體產品中,它首次向開發人員展示了這種語言的威力。 Nombas最終把Cmm的名字改成了ScripEase。原因是後面的部分(mm)聽起來過於“消極”,同時字母C“令人害怕”。 現在ScriptEase已經成為了Nombas產品背後的主要驅動力。 當Netscape Navigator嶄露頭角時,Nombas開發了個可以嵌入網頁中的CEnvi的版本。 這些早期的試驗稱為Espresso Page(濃咖啡般的頁面),它們代表了每個在萬維網上使用的客戶端腳本語言。 而Nombas絲毫沒有料到它的理念將會成為網際網路的一塊重要基石。

當網上衝浪越來越流行時,對於開發客戶端腳本的需求也逐漸增大。此時,大部分網際網路用戶還僅僅通過28.8kbit/s的數據機來連接到網路,即便這時網頁已經不斷地變得更大和更複雜。而更加加劇用戶痛苦的是,僅僅為了簡單的表單有效性驗證,就要與伺服器端進行多次的往返交互。設想一下,用戶填完一個表單,點擊提交按鈕,等待了30秒鐘的處理後,看到的卻是一條告訴你忘記填寫一個必要的欄位。那時正處於技術革新最前沿的Netscape,開始認真考慮一種開發客戶端腳本語言來解決簡單的處理問題。

當時工作於Netscape的Brendan Eich,開始著手為即將在1995年發行的Netscape Navigator 2.0開發一個稱之為LiveScript的腳本語言,當時的目的是同時在瀏覽器和伺服器(本來要叫它LiveWire的)端使用它。Netscape與Sun公司聯手及時完成LiveScript實現。就在Netscape Navigator 2.0即將正式發佈前,Netscape將其更名為JavaScript,目的是為了利用Java這個網際網路時髦辭彙。Netspace的賭註最終得到回報,JavaScript從此變成了網際網路的必備組件。

因為JavaScript 1.0如此成功,Netscape在Netscape Navigator 3.0中發佈了1.1版。恰巧那個時候,微軟決定進軍瀏覽器,發佈了IE 3.0 並搭載了一個JavaScript的克隆版,叫做JScript(這樣命名是為了避免與Netscape潛在的許可糾紛)。微軟步入Web瀏覽器領域的這重要一步雖然令其聲名狼藉,但也成為JavaScript語言發展過程中的重要一步。

在微軟進入後,有3種不同的JavaScript版本同時存在:Netscape Navigator 3.0中的JavaScript、IE中的JScript以及CEnvi中的ScriptEase。與C和其他編程語言不同的是,JavaScript並沒有一個標準來統一其語法或特性,而這3種不同的版本恰恰突出了這個問題。隨著業界擔心的增加,這個語言標準化顯然已經勢在必行。

1997年,JavaScript 1.1作為一個草案提交給歐洲電腦製造商協會(ECMA)。第39技術委員會(TC39)被委派來“標準化一個通用、跨平臺、中立於廠商的腳本語言的語法和語義”(http://www.ecma-international.org/memento/TC39.htm)。由來自Netscape、Sun、微軟、Borland和其他一些對腳本編程感興趣的公司的程式員組成的TC39錘煉出了ECMA-262,該標准定義了叫做ECMAScript的全新腳本語言。

在接下來的幾年裡,國際標準化組織及國際電工委員會(ISO/IEC)也採納ECMAScript作為標準(ISO/IEC-16262)。從此,Web瀏覽器就開始努力(雖然有著不同程度的成功和失敗)將ECMAScript作為JavaScript實現的基礎。

儘管ECMAScript是一個重要的標準,但它並不是JavaScript唯一的部分,當然,也不是唯一被標準化的部分。實際上,一個完整的JavaScript實現是由以下3個不同部分組成的

核心(ECMAScript)——JavaScript的核心ECMAScript描述了該語言的語法和基本對象
文檔對象模型(DOM)——DOM描述了處理網頁內容的方法和介面
瀏覽器對象模型(BOM)——BOM描述了與瀏覽器進行交互的方法和介面
ECMAScript、DOM、BOM將是我們之後課程的主要內容。

JavaScript與Java
儘管名字中有Java,但是JavaScript和Java幾乎沒有什麼共同點。Java是一種全功能的編程語言,是由Sun公司開發和推廣的。Java是C和C++編程語言之後的又一種主流語言,程式員可以使用它創建完整的應用程式和控制消費電子設備。與其他語言不同,Java宣稱具有跨平臺相容性;也就是說,程式員應該能夠編寫出可以在所有種類的機器上運行的Java程式,無論機器運行的是Windows、Mac OS X還是任何風格的UNIX。但實際上,Java不總是能夠實現這個夢想,因為Sun和微軟公司在這種語言的發展方向方面有很大的分歧。微軟公司首先試圖以自己的方式將Java集成到Windows中(Sun認為,這種方式使Java在Windows上以一種方式工作,而在其他機器上以另一種方式工作,從而破壞了Java的跨平臺相容性);隨後,微軟公司從Windows中完全去除了Sun的Java,而創建了自己的類Java語言:C#。經過兩公司之間的一輪訴訟之後,Sun占據了上風,現在可以在Windows(或Linux)上安裝Sun的最新Java版本(http://www.java.com/getjava/)。Mac OS X操作系統在安裝時會附帶Java。

JavaScript可以做什麼
用JavaScript可以做許多事情,使網頁更具交互性,給站點的用戶提供更好、更令人興奮的體驗。JavaScript使你可以創建活躍的用戶界面,當用戶在頁面間導航時向他們提供反饋。例如,你可能在一些站點上見過在滑鼠指針停留時突出顯示的按鈕。這是用JavaScript實現的,使用了一種稱為翻轉器(rollover)的技術 可以使用JavaScript確保用戶在表單中輸入有效的信息,這可以節省你的業務時間和開支。如果表單需要進行計算,那麼可以在用戶機器上的JavaScript中完成,而不需要任何伺服器端處理。你應該知道一種區分程式的方式:在用戶機器上運行的程式稱為客戶端(client-side)程式;在伺服器上運行的程式(包括後面要討論的CGI)稱為伺服器端(server-side)程式。 可以使用JavaScript根據用戶的操作即時創建定製的HTML頁面。假設你正在運行一個旅行指南站點,用戶點擊夏威夷作為旅游目的地。你可以在一個新視窗中顯示最新的夏威夷旅游指南。JavaScript可以控制瀏覽器,所以你可以打開新視窗、顯示警告框以及在瀏覽器視窗的狀態欄中顯示定製的消息。JavaScript有一套日期和時間特性,可以生成時鐘、日曆和時間戳文檔。 JavaScript還可以處理表單、設置cookie、即時構建HTML頁面以及創建基於Web的應用程式。

JavaScript不能做什麼
JavaScript是一種客戶端(client-side)語言;也就是說,設計它的目的是在用戶的機器上執行任務,而不是在伺服器上。因此,JavaScript有一些固有的限制,這些限制主要出於安全原因:

1.JavaScript不允許讀寫客戶機器上的文件。這是有好處的,因為你肯定不希望網頁能夠讀取自己硬碟上的文件,或者能夠將病毒寫入硬碟,或者能夠操作你電腦上的文件。唯一的例外是,JavaScript可以寫到瀏覽器的cookie文件,但是也有一些限制
2.JavaScript不允許寫伺服器機器上的文件。儘管寫伺服器上的文件在許多方面是很方便的(比如存儲頁面點擊數或用戶填寫的表單數據),但是JavaScript不允許這麼做。相反,需要用伺服器上的一個程式處理和存儲這些數據。這個程式可以是用Perl或PHP等語言編寫的CGI或Java程式。
3.JavaScript不能關閉不是由它自己打開的視窗。這是為了避免一個站點關閉其他任何站點的視窗,從而獨占瀏覽器。
4.JavaScript不能從來自另一個伺服器的已經打開的網頁中讀取信息。換句話說,網頁不能讀取已經打開的其他視窗中的信息,因此無法探察訪問這個站點的衝浪者還在訪問哪些其他站點。
Hello,JavaScriptWorld!
我們的第一個腳本:最經典的HelloWorld程式!

<script type="text/javascript">
	document.write("<h2>Hello,JavaScriptWorld!</h2>");
</script>
  • 1
  • 2
  • 3

開發環境
選擇一個你喜歡的純文本編輯器或IDE
NotePad++
VIM
UltraEdit
EditPlus
gEdit(Unix)
Emacs(Mac/Unix)
其它
至少一個符合W3C標準的瀏覽器(推薦火狐瀏覽器),和一些市場上流行的瀏覽器(IE)
FireFox 3.0+
Internet Explorer 6.0+ (由於IE具有多種不同的版本,還推薦安裝IETester)
Google Chrome 1.0+
Opera 9.0+
Safari 3.0+
調試工具
FireFox下的FireBug,Venkman等
IE下的IE DeveloperToolbar,MS Script Debugger等(強烈不推薦MS Script Debugger,安裝之後問題多)
Google Chrome 的JS控制台已經很強大了,Opera的錯誤控制台也可以,Opera蜻蜓和FireBug一樣強大,Safari具有和Chrome一樣的控制台


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 購物車是電商APP的一個關鍵功能點,一般購物車包含 3~4 個頁面,分別是: 1.購物車的商品列表頁 2.商品下單頁 3.訂單付款頁面 4.訂單付款成功頁面 由於現有購物車邏輯相對混亂,這裡重新整理一下商品下單頁的業務流程設計 1.生成訂單 這裡在業務層面把訂單的生命周期劃分為4個階段,分別是: 訂 ...
  • 程式26:給一個不多於5位的正整數。要求:一、求它是幾位數,二、逆序列印出各位數字。 var test=456; var arr=[]; arr[0]=test%10; arr[1]=parseInt(test%100/10); arr[2]=parseInt(test%1000/100); arr ...
  • 前面兩個終於把webpack相關配置解析完了。 現在終於進入vue的開發了 vue組件化開發預熱 前期準備 ...
  • React Native最近有大動作,於2019年3月12日發佈新版本0.59。主要有兩點值得升級:支持React Hooks;升級了JavaScriptCore,使Android性能有大幅提升。據用過的人說,長列表快速滑動而產生的白屏得到大大改善。這麼好的東西得趕緊體驗一下啊。 簡單的執行npm ...
  • 好久沒寫博客,從一道題目開始吧 實現一個sum函數,支持sum(1,2)和sum(1)(2)兩種調用方式 說實在的,沒啥難的,很簡單寫出來 或者用ES6的展開操作符,或者是arguments 考察的內容其實就是函數作為返回值,簡單涉及到了閉包,還有arguments的判斷,ES6展開操作符的剩餘語法 ...
  • async await的執行 註意: 本次代碼僅在 Chrome 73 下進行測試。 start 不瞭解 async await 的,先去看阮一峰老師的文章 "async 函數" 。 先來看一道 "頭條的面試題" ,這其實是考察瀏覽器的 event loop. 運行結果如下: Event Loop ...
  • webpack是一個現代JavaScript應用程式的靜態模塊打包器,借用官網的一張圖,它能夠將一些預處理語言,js的最新語法轉換成瀏覽器識別的內容。現在一般的前端框架都有比較成熟的腳手架,大多數對webpack都有個較好的集成,我們只需要敲一些簡單的命令就能生成一個通用的項目模板,比較便捷,但是要 ...
  • 數組扁平化 數組扁平化即將多維數組轉化為一維數組: 例: [1,2,3,4,5,[2,3,4,[6,10]]]==>[1,2,3,4,5,2,3,4,6,10]; 實現數組扁平化的方法有好幾種,在這裡只說一種我比較常用的,自己感覺比較核心的方法,即遍曆數組arr,若arr[i]為數組則遞歸遍歷,直至 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...