首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

JavaScript:被誤解最深的程式語言——從名字由來到原型繼承的真相

     編輯:Java 相關知識

前言:流行不等於被理解

JavaScript(曾用名 Mocha、LiveScript、JScript、ECMAScript)是全球最普及的程式語言,幾乎每台個人電腦都安裝並活躍運行著至少一個 JS 引擎。然而,極少人知道它是一門優雅的動態物件導向通用程式語言。為何這門語言被誤解如此之深?道格拉斯·克羅克福德為我們層層剝開真相。

一、 名字的陷阱

  • Java 前綴:刻意製造與 Java 的關聯假象,實則「JavaScript 不是解釋執行的 Java」,正如「Java 不是 C 的子集」。語法相似 ≠ 語言關係。
  • -Script 後綴:暗示「非真正程式語言」,實為領域專用權衡——犧牲效能換取表達力與動態性。
  • 誕生緣起:Netscape 開發,初名 LiveScript,為蹭 Java 熱度改名。Sun 從未參與設計。

二、 披著 C 语法外衣的 Lisp

大括號、for 迴圈讓它像過程式語言,但基因裡流著函數式血統:

  • 陣列取代列表,物件取代屬性列表
  • 函數是一等公民,支援閉包
  • 無需平衡括號即擁有 Lambda

這使其更接近 Lisp/Scheme,而非 C/Java。

三、 類型定型:Web 瀏覽器的「超人」

最初為 Netscape Navigator 設計,成功後成為所有瀏覽器標配。這導致它被「定型」為唯網頁腳本,實則適合大量非 Web 應用。克羅克福德喻其為程式語言界的「喬治·里夫斯(超人扮演者)」——被角色掩蓋了真實能力。

四、 移動的靶子:版本碎片化

  • 早期版本極弱:無異常處理、無內部函數、無繼承。
  • 現代版本已是完整 OO 語言,但眾多觀點仍停留在不成熟形態。
  • ECMA 委員會擴展語言卻加劇版本碎片,製造混亂。

五、 設計缺陷與補救

缺陷影響補救
+ 重載(加法/串接)且強制型別轉換易產生非預期結果嚴格使用 ===、parseInt 等
with 敘述語義模糊、效能差避免使用
保留字策略過嚴限制識別符命名無完美方案
自動分號插入掩蓋語法錯誤養成明確分號習慣 + Lint 工具
字面正則表達式符號易混淆小心使用

整體設計合理,幸而優秀的 Lint 工具能緩解大多數問題。ECMA 委員會卻似乎更熱衷製造新問題而非修復舊問題。

六、 糟糕的實作與書籍

  • 早期瀏覽器實作滿是 Bug,嵌入更爛的瀏覽器中,惡化語言聲譽。
  • 市面 JS 書籍錯誤百出、範例低劣、宣揚壞習慣。克羅克福德唯一推薦:《JavaScript: The Definitive Guide (4th Edition)》David Flanagan 著。

七、 「準標準」的標準文檔

ECMA-262 規格品質極差:難讀、難懂。導致作者無法依賴標準文檔深入理解,間接催生爛書。ECMA 與 TC39 應深感羞愧。

八、 業餘者標籤

多數 JS 寫作者非受訓程式設計師,缺乏紀律。但 JS 表達力強大,讓他們仍能寫出有用程式,反被誤認為「只適合業餘愛好者」。這是嚴重誤讀——專業開發者同樣能用 JS 構建企業級系統。

九、 物件導向的真相

  • 有物件、有封裝、有繼承:物件含資料與方法、可巢狀、建構函數替代類、原型繼承替代類別繼承。
  • 雙重建模能力:支援繼承與聚合,動態特性使聚合更靈活。
  • 私有成員誤區:傳統觀點稱 JS 無私有成員,實則透過閉包可實現真私有變數/方法(模組模式)。
  • 繼承誤區:不僅支援經典繼承,還支援多種程式碼複用模式(混入、寄生組合等)。

結語

JavaScript 的「被誤解」源於名字行銷、早期實作、文檔與教材的多重失誤。剝離偏見,你將看到一門擁有第一級函數、閉包、原型繼承、動態特性的強大語言。下一次聽到「JS 只是玩具語言」,請微笑著丟出一個閉包實現的私有計數器——真相往往藏在程式碼裡。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved