簡述ES5 ES6

来源:http://www.cnblogs.com/xuechenlei/archive/2016/09/14/5867486.html
-Advertisement-
Play Games

很久前的某一天,一位大神問我,你知道ES6相對於ES5有什麼改進嗎? 我一臉懵逼的反問,那個啥,啥是ES5、ES6啊。 不得不承認與大神之間的差距,回來深思了這個問題,結合以前的知識,算是有了點眉目。 JavaScript一種直譯式腳本語言,是一種動態類型、弱類型、基於原型的語言,我們知道javas ...


  很久前的某一天,一位大神問我,你知道ES6相對於ES5有什麼改進嗎?

  我一臉懵逼的反問,那個啥,啥是ES5、ES6啊

  不得不承認與大神之間的差距,回來深思了這個問題,結合以前的知識,算是有了點眉目。

  JavaScript一種直譯式腳本語言,是一種動態類型、弱類型、基於原型的語言,我們知道javascript的三個基本組成部分是ECMAJavascript(European Computer Manufacturers Association javascript,也就是前面說的ES,但之前你問我ES5orES6我就真懵逼了),BOM,DOM,es可以看出是javascript的前身,是javascript的內核定義用法,而所有前端框架、ui庫都是基於javascript的,也就是用原生js寫的,ES的重要性不言而喻,如果你習慣用輪子,比如各種jqueryui,平時也很少用js寫東西,對這個就不很很瞭解,如果你是大牛,經常造輪子寫東西,github上start一片,博客上粉絲眾多,就必然對這要有很深的研究,不然寫的東西沒有深度的。

  ES5和ES6從字面上理解是一個升級的過程,出了一代新標準,發展迅速的it行業,去瞭解和適應一種新標準用法很有必要,這也是我為什麼選擇寫這個主題;想要瞭解一些原始的定義和由來,我則建議你閱讀一些相關的資料,解釋了EScript的前世今生,給大家科普一段:

Ecma標準建立在一些原本的技術上,最為著名的是JavaScript(網景)和JScript (微軟)。語言由網景的Brendan Eich發明而第一次出現在這個公司的Navigator 2.0瀏覽器上。它出現在所有Netscape後來的瀏覽器以及微軟從Internet Explorer 3.0之後的所有瀏覽器上。

這一標準的編製自1996年十一月開始。這一Ecma標準的第一個版本被1997年六月的Ecma General Assembly採納。

上述Ecma標準被以快速跟進流程提交至ISO/IEC JTC 1,並作為於1998年四月作為ISO/IEC 16262通過。1998年六月Ecma General Assembly通過了ECMA-262第二版以保持它與ISO/IEC 16262的完全一致性。第一版到第二版的變更僅僅是編輯性質的。

第三版標準引入了強大的正則表達式,更佳的字元串處理,新的控制語句,try/catch異常處理,更嚴密地錯誤定義,格式化的數字輸出以及一些為國際化和未來語言成長預留的小變更。ECMAScript標準的第三版1999年十二月的Ecma General Assembly採納並於2002年六月作為ISO/IEC 16262:2002發佈。

自第三版發佈以來,ECMAScript因其與萬維網的關聯而獲得了廣泛採用,它已經成為所有web瀏覽器實質上都提供的一種編程語言。為了編製第四版ECMAScript,有很多有意義的工作。儘管這工作沒能完成而且也沒有作為ECMAScript的第四版發佈,它促進了語言的進化。ECMAScript第五版(發佈為ECMA-262 5th edition)紙面化了很多事實上已經在瀏覽器形成共識的語言規範解析並且增加了對自第三版發佈以來的新功能的支持。這些功能包括訪問器屬性,反射創建以及對象檢測,屬性特性的程式控制,新增的數組操作函數,JSON對象編碼格式,以及提供了改進的錯誤檢查以及程式安全性的嚴格模式。

這一ECMAScript 5.1版本標準完全與國際標準ISO/IEC 16262:2011的第三版本一致。

ECMAScript是一個充滿活力的語言,而且語言的演進尚未完成。有意義的技術性增強將會在未來版本的規範中持續進行。

這一Ecma規範由2011年六月Ecma General Assembly採納             --ES5

   需要註意的是,EScript之前的更新迭代版本叫法都是按照ESx來的,而ES6的叫法實際上是延續了這個習慣,截止發佈日期,JavaScript的官方名稱是ECMAScript 2015,Ecma國際意在更頻繁地發佈包含小規模增量更新的新版本,下一版本將於2016年發佈,命名為ECMAScript 2016。以後的更新中,新版本將按照ECMAScript+年份的形式發佈,ecmascript2015官方說明。近年來更新的頻率越來越高,也反映了這一語言的發展迅速,功能越來越強,作為和這些緊密相關的碼農大神們也要持續的學習跟進啊。

  ES6在2015年發佈,相對於上一版本,加入了很多新特性,ES5無從說起(不知道從哪說起,就是平時碼的javascript吧),所以就說下ES6的新特性吧,ES6的新特性有:let, const, class, extends, super, arrow functions, template string, destructuring, default, rest arguments;

  相關的詳細說明大家可以翻閱官網說明,下麵我也會舉一些小例子幫助理解;

  let,const

  用法和var類似,定義變數,不同的是let為javascript增加了塊級作用域,聲明只在所在代碼塊有效,不影響作用域外的同名變數;你可以嘗試碼下

let name="x";
if(true){
    let name="y";
    alert(name);
}
alert(name);

   你會發現網頁會依次列印y和x,如果是var聲明,name會被重新賦值;const也是聲明,不同的是const聲明後的值不可更改,也即readonly,這個用的地方很少吧,為避免衝突的場景可以使用,以免報錯;

  class,extends,super

  在ES6之前,原型、構造函數、繼承對於大多說人來說是個麻煩點(一直到現在,我還經常去翻工具書...),而ES6中的class,extends,super很大程度上改觀了這個問題,比如之前關於構造函數、繼承可能這樣寫:

function Person(name,job){
      this.name="personA";
      this.job="work";
      this.dowhat=function(this.job){
          alert(this.name+" should "+this.job)  
    }
}
var person=new Person("personB","player");

  es相對於編程語言是弱類型,一個var可以聲明一切,然後在聲明的對象中通過原型繼承來衍生其他方法,作為習慣強類型語言的我常常在理解上出錯,而結合class,extends,super的es6原型寫法更清晰、更偏向面向對象的寫法:

        class Person{
            constructor(){
                this.name="Person"
            } 
            dowhat(todo){
                alert(this.name+" Should "+todo);
            }
        }
        let person=new Person();
        person.dowhat("work");
        class Boy extends Person{
            constructor(){
                super();
                this.name="Boy"
            }
        }
        let boy=new Boy();
        boy.dowhat("go to school");

  (ps:博客園為毛不提供線上測試的功能,一點擊就運行測試,就不用複製了,還是我沒發現這個功能?)

  面向對象的思想有木有!有木有!有木有!通過class類定義創造一個“類”,並且有構造函數constructor,而this對象代表實例對象,構造函數定義自身的方法和屬性,構造函數外的方法和屬性通過繼承可以共用,class之間通過extends實現繼承,Boy通過extends繼承了Person定義的方法和屬性,比ES5好理解的多,而super這裡代指父級的示例(this),子類必須在構造函數中調用super,否則在新建實例的時候會報錯,ES6的繼承機制,實質是先創造父類的實例對象this,通過super的調用,實現子類的繼承和修改。

  Arrow Function

  字面理解就是箭頭功能,什麼鬼;一種用箭頭“=>”來定義函數的新語法,簡單示範:

var sum = (num1, num2) => num1 + num2;
//等同於
function sum(num1,num2){
      return num1+num2      
}

  它的功能不止於寫法簡便,與傳統的js寫法主要區別是,對 this 的關聯,函數內置 this 的值,取決於箭頭函數在哪兒定義,而非箭頭函數執行的上下文環境。

  template string

  字面理解也即是模板字元串了,實際它的作用也是在插入比較多的html模板內容時候使用的,比如傳統的拼接是這樣的:

$(".class p").append(
  "There are <b>" + count + "</b> " +
  "items in your basket, " +
  "<em>" + onSale +
  "</em> are on sale!"
);

  使用template string 是這樣的:

$(".class p").append(`
  There are <b>${count}</b> items
   in your basket, <em>${onSale}</em>
  are on sale!
`);

  用反引號(`)來標識起始,用${}來引用變數,並且會保留引用中的空格和縮進,比拼接方便多了。

  destruturing

//直接上碼
var boy="lilei";
var girl="hanmeimei";
var human={boy:boy,girl:girl};
console.log(human)  //Object {boy: "lilei", girl: "hanmeimei"}

//destructuring
var boy="lilei";
var girl="hanmeimei";
var human={boy,girl};
console.log(human)  //Object {boy: "lilei", girl: "hanmeimei"}

  也即是,ES6中允許按照一定的模式,從數組和對象中取值和賦值,就就是destruturing。

  default

  ES6中允許為函數設置預設值,這個很好理解:

function log(x, y = 'world') {
    console.log(x, y);
}
log('Hello');   // Hello world
log('Hello', 'China');  // Hello China
log('Hello', '');   // Hello

  rest

  休息?這個理解也比較容易,上來就懂:

function person(...types){
    console.log(types)
}
person('lilei', 'hanmeimei', 'lili') //['lilei', 'hanmeimei', 'lili']

  先寫到這裡吧,可能有理解上的誤區,歡迎小伙伴們指正,以後再來慢慢補全修正

  中秋節到了,祝大家中秋節快樂,馬上來的國慶節快樂!

  


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

-Advertisement-
Play Games
更多相關文章
  • 標題 `` 對齊方式有left,center,right三種,預設表示left 段落 段落標記的結束標記''可以省略,一個新的段落開始標記就意味著上一個段落的結束 換行 不換行 當一段很長的時候,瀏覽器一般會自動進行換行處理,如果不希望瀏覽器這麼做,可以使用``標記 水平線 使用``可以在網頁中插入 ...
  • [1]刪除節點 [2]插入節點 [3]特性節點 [4]文本節點 ...
  • 這次和大家分享的是自己寫的一個table常用幾種展示格式的js插件取名為(table-shenniu),樣式使用的是bootstrap.min.css,還需要引用jquery.min.js包,這個插件由來的目的是項目中需要一個table格式的提交數據的頁面,功能有合併單元格,只能提交選中行數據,全選 ...
  • JavaScript的函數定義有個特點,它會先掃描整個函數體的語句,把所有申明的變數“提升”到函數頂部: 雖然是strict模式,但語句var x = 'Hello, ' + y;並不報錯,原因是變數y在稍後申明瞭。但是alert顯示Hello, undefined,說明變數y的值為undefine ...
  • screen.width screen.height screen.availHeight //獲取去除狀態欄後的屏幕高度 screen.availWidth //獲取去除狀態欄後的屏幕高度 一、通過瀏覽器獲得屏幕的尺寸 二、獲取瀏覽器視窗內容的尺寸 //高度 window.innerHeight ...
  • 簡單說明 這篇文章是我學習react一個多月來的總結,從基礎開始(包括編輯器設置,構建工具搭建),一步一步走向react開發。相信我,看完這篇文章,跟著文章的步驟走,保證讓你入門react並愛上react,掌握react-router,redux。本文遵循由淺入深的原則。 一、編輯器開始 這裡介紹的 ...
  • 回調函數 在javascript中,當一個函數A作為另外一個函數B的其中一個參數時,則稱A函數為回調函數,即A可以在函數B的運行周期內執行(開始,中間,結束)。 舉例來說,有一個函數用於生成node. 又有一個findNodes函數聲明用於查找所有節點,然後通過callback回調進行執行代碼。 關 ...
  • 1、DIV+CSS定義及優勢 Div+css 是什麼? Div+css 是一種目前比較流行的網頁佈局技術 Div 來存放需要顯示的數據(文字,圖表..) , css 就是用來指定怎樣顯示, 從而做到數據和顯示相互的效果 Div+css 優勢 採用DIV+CSS模式的網站具有以下優勢: 表現和內容相分 ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...