JavaScript 簡介

JavaScript 簡介

通常來講,完整的JavaScript包括如下幾個部分:javascript

  • ECMAScript,描述了該語言的語法和基本對象;
  • 文檔對象模型(DOM),描述處理網頁內容的方法和接口;
  • 瀏覽器對象模型(BOM),描述與瀏覽器進行交互的方法和接口。

本文(系列)主要探討ECMAScript的特性和應用,由於平時交流習慣用JavaScript,後面都用JavaScript代替,實際上JavaScript是ECMAScript標準的實現和擴展。html

JavaScript 是一門多範式的動態語言,包含類型、運算符、標準的內置對象和方法。
關於JavaScript 的設計思路,阮一峯老師是這麼總結的:java

  1. 借鑑 C 語言的基本語法;
  2. 借鑑 Java 語言的數據類型和內存管理;
  3. 借鑑 Scheme 語言,將函數提高到"第一等公民"(first class)的地位;
  4. 借鑑 Self 語言,使用基於原型(prototype)的繼承機制。

綜合各家所長,發展出了一門多範式的動態語言ajax

  • 多範式:支持命令式編程(流程控制語句)、支持函數式編程(函數是一等公民)、支持面向對象編程(原型擴展);
  • 動態:編程

    • 弱類型,使用var聲明變量;
    • 對象屬性任意擴展;
    • 解釋執行語言,代碼不進行預編譯(瀏覽器端)。

JavaScript 發展歷程

  • 1995年建立——Brendan Eich(Netscape工程師);
  • 1996年首次發佈——在Netscape 2上,當時被稱爲 LiveScript ,由於和 sun 合做,搭上Java這個編程語言「熱詞」,重命名爲「JavaScript」;
  • 1997年設立標準——ECMA以JavaScript語言爲基礎制定了ECMAScript標準規範ECMA-262;
  • 1999年發佈第3版;
  • 2009年發佈第5版(ES5);
  • 2015年發佈第6版(ES6/ES2015);
  • 2016年發佈第7版(ES7/ES2016);
  • 2017年發佈第7版(ES8/ES2017);
  • 2018年發佈第7版(ES9/ES2018)。
多了個年份的叫法,不查資料都搞不清哪來這麼多標準。更多請查閱 ecma-262 或者 維基百科-ECMAScript
是否是有點奇怪,爲啥沒有ES4呢,由於ES4夭折了~~聽說是BE大佬步子邁太大,組織上沒贊成,想簡單瞭解的童鞋能夠看下知乎上 尤大的回答

JavaScript 語言特性

弱類型

JavaScript使用varletconst關鍵字來進行變量聲明,除了const聲明一個只讀常量外,其餘兩種方式並不肯定變量的類型:瀏覽器

var a=1
a={
    name:'jack'
}
a='lucy'

在Java強類型語言中必須這麼寫:安全

int a;
String b;

優勢:編程語言

  1. 能夠寫出很是簡潔的代碼。

缺點:函數式編程

  1. 寫法隨意,在沒有良好編程規範的狀況下寫出來的多是個雷區;
  2. 沒法預檢查。例以下面的函數,指望是數值,傳入數值型字符串不會報錯,返回的不是預期值從而致使bug:函數

    function add(a,b){
        return a+b;
    }
    //指望,return 3
    add(1,2)
    //bug,return '12'
    add('1',2)

弱類型的缺點容易致使bug,下降開發效率。開發建議:

  1. 變量聲明表意清楚惟一;
  2. 寫好JSDoc文檔,函數的參數要求、返回值;
  3. 使用TypeScript等嚴格超集 阮一峯——強類型 JavaScript 的解決方案

對象屬性任意擴展

強類型語言 對象結構在聲明時已經肯定好,添加字段須要修改聲明,JavaScript 的對象聲明簡單,擴展容易,寫起來更輕鬆自由。

var cat={};
cat.name='mimi';
cat.age=1;

優勢:

  1. 寫起來方便;
var list=[];
$.ajax({
    ...
    onSuccess(res){
        list=res.data;
    }
})

缺點:

  1. 不方便管理,使用不安全。

開發建議:

  1. 關鍵字段在聲明時定義清楚;
  2. 不隨意增刪對象屬性。

支持面向對象編程

JavaScript中一切都是對象。

// '1'
1['toString']()

並且對象的繼承實現簡單:

開發建議:

  1. 方式有不少種、使用prototype模式或者其餘淺顯易懂的方式來實現:
  function Cat(name,color){
    this.name = name;
    this.color = color;
  }

  Cat.prototype.type = "貓科動物";
  Cat.prototype.eat = function(){alert("吃老鼠")};

支持函數式編程

安利一個系列JavaScript 函數式編程(一)——佯真愚

總結

  • JavaScript寫法沒有那麼多的約束,入門簡單;
  • JavaScript靈活支持多種開發範式,可以適應多種開發要求。

軟件開發是給工程性的活動,須要遵循原則,保障代碼易用性,可閱讀性。合理的利用JavaScript的特性,經過約束和規範高效的進行軟件開發。

參考連接

MDN:A re-introduction to JavaScript (JS tutorial)
阮一峯老師:Javascript誕生記
雲棲社區:《JavaScript核心概念及實踐》——1.2 JavaScript語言特性
維基百科:JavaScriptECMAScript

相關文章
相關標籤/搜索