vue學習之二ECMAScript6標準

一、ECMAScript6標準簡述

ECMAScript 6.0(以下簡稱 ES6)是 JavaScript 語言的下一代標準,已經在 2015 年 6 月正式發布了。它的目標,是使得 JavaScript 語言可以用來編寫復雜的大型應用程序,成為企業級開發語言。

1.1ECMAScript 和 JavaScript 的關系

要講清楚這個問題,需要回顧歷史。1996 年 11 月,JavaScript 的創造者 Netscape 公司,決定將 JavaScript 提交給標準化組織 ECMA,希望這種語言能夠成為國際標準。次年,ECMA 發布 262 號標準文件(ECMA-262)的第一版,規定了瀏覽器腳本語言的標準,并將這種語言稱為 ECMAScript,這個版本就是 1.0 版。

該標準從一開始就是針對 JavaScript 語言制定的,但是之所以不叫 JavaScript,有兩個原因。一是商標,Java 是 Sun 公司的商標,根據授權協議,只有 Netscape 公司可以合法地使用 JavaScript 這個名字,且 JavaScript 本身也已經被 Netscape 公司注冊為商標。二是想體現這門語言的制定者是 ECMA,不是 Netscape,這樣有利于保證這門語言的開放性和中立性。

因此,ECMAScript 和 JavaScript 的關系是,前者是后者的規格,后者是前者的一種實現(另外的 ECMAScript 方言還有 Jscript 和 ActionScript)。日常場合,這兩個詞是可以互換的。

1.2ECMAScript 的歷史

ES6 從開始制定到最后發布,整整用了 15 年。

前面提到,ECMAScript 1.0 是 1997 年發布的,接下來的兩年,連續發布了 ECMAScript 2.0(1998 年 6 月)和 ECMAScript 3.0(1999 年 12 月)。3.0 版是一個巨大的成功,在業界得到廣泛支持,成為通行標準,奠定了 JavaScript 語言的基本語法,以后的版本完全繼承。直到今天,初學者一開始學習 JavaScript,其實就是在學 3.0 版的語法。

2000 年,ECMAScript 4.0 開始醞釀。這個版本最后沒有通過,但是它的大部分內容被 ES6 繼承了。因此,ES6 制定的起點其實是 2000 年。

為什么 ES4 沒有通過呢?因為這個版本太激進了,對 ES3 做了徹底升級,導致標準委員會的一些成員不愿意接受。ECMA 的第 39 號技術專家委員會(Technical Committee 39,簡稱 TC39)負責制訂 ECMAScript 標準,成員包括 Microsoft、Mozilla、Google 等大公司。

2007 年 10 月,ECMAScript 4.0 版草案發布,本來預計次年 8 月發布正式版本。但是,各方對于是否通過這個標準,發生了嚴重分歧。以 Yahoo、Microsoft、Google 為首的大公司,反對 JavaScript 的大幅升級,主張小幅改動;以 JavaScript 創造者 Brendan Eich 為首的 Mozilla 公司,則堅持當前的草案。

2008 年 7 月,由于對于下一個版本應該包括哪些功能,各方分歧太大,爭論過于激烈,ECMA 開會決定,中止 ECMAScript 4.0 的開發,將其中涉及現有功能改善的一小部分,發布為 ECMAScript 3.1,而將其他激進的設想擴大范圍,放入以后的版本,由于會議的氣氛,該版本的項目代號起名為 Harmony(和諧)。會后不久,ECMAScript 3.1 就改名為 ECMAScript 5。

2009 年 12 月,ECMAScript 5.0 版正式發布。Harmony 項目則一分為二,一些較為可行的設想定名為 JavaScript.next 繼續開發,后來演變成 ECMAScript 6;一些不是很成熟的設想,則被視為 JavaScript.next.next,在更遠的將來再考慮推出。TC39 委員會的總體考慮是,ES5 與 ES3 基本保持兼容,較大的語法修正和新功能加入,將由 JavaScript.next 完成。當時,JavaScript.next 指的是 ES6,第六版發布以后,就指 ES7。TC39 的判斷是,ES5 會在 2013 年的年中成為 JavaScript 開發的主流標準,并在此后五年中一直保持這個位置。

2011 年 6 月,ECMAscript 5.1 版發布,并且成為 ISO 國際標準(ISO/IEC 16262:2011)。

2013 年 3 月,ECMAScript 6 草案凍結,不再添加新功能。新的功能設想將被放到 ECMAScript 7。

2013 年 12 月,ECMAScript 6 草案發布。然后是 12 個月的討論期,聽取各方反饋。

2015 年 6 月,ECMAScript 6 正式通過,成為國際標準。從 2000 年算起,這時已經過去了 15 年。

二、ES6常用語法

2.1變量的定義

ES5里面只有全局作用域,函數作用域
ES6的let帶來了塊級作用域,全局作用域,函數作用域

2.1.1 let定義變量
- 沒有變量提升
- 帶來了塊級作用域
- 不能重復定義

2.1.2 const定義常量
- 沒有變量提升
- 帶來了塊級作用域
- 不能重復定義
- 定義的時候需要賦值
- 定義之后不能修改
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Title</title>
</head>
<body><script>// ES5里面只有全局作用域,函數作用域// ES6的let帶來了塊級作用域,全局作用域,函數作用域// if (true) {//     let username = "alex";// }const PI = 3.14;PI = 3.2;console.log(PI)</script></body>
</html>

  ?2.2模版字符串

2.2.1 `` 反引號
2.2.2 ${}存儲變量
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Title</title>
</head>
<body><div id="app"></div><script>var oDiv = document.getElementById("app");// oDiv.innerHTML = '<h1>Hello world' +//     '<h2>Hello world</h2>' +//     '<h3>hello world</h3>' +// '</h1>'let username = "alex";let age = 73;let hobby = 'girls';oDiv.innerHTML = `<h1>Hello ${username}<h2>hello ${age}</h2><h3>hello ${hobby}</h3></h1>`</script>
</body>
</html>

  2.3數據的結構賦值

2.3.1 數組的解構賦值
2.3.2 對象的解構賦值
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Title</title>
</head>
<body><script>let ary = [1, 2, 3];// let a = ary[0];// let b = ary[1];// let c = ary[2];let [a, b, c, d = 1] = ary;let obj = {name: "alex",age: 18};let { name: username, age } = obj;console.log(username, age);</script></body>
</html>

  2.4、函數的擴展

2.4.1 函數參數默認值
2.4.2 箭頭函數
- this的指向問題
- 定義的時候就確定了
- 普通函數的this指向調用者
- arguments不能使用
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Title</title>
</head>
<body><script>// function foo(x, y=10) {//     number = y;//     return number;// }//// // ret = foo(1, 2);// // var ret = foo(1);// var ret = foo(1, 0);// console.log(ret);// 第一個v代表需要傳入的參數// 第二個v代表返回值// let func = v => v;// let func1 = (x, y) => x;// let func2 = (x, y) => {let result = x + y; return result;};// console.log(func(10));// console.log(func1(10, 20));// console.log(func2(10, 20));// function foo() {//     console.log(this);// }//// foo();//// let obj = {//     func: foo,// };//// obj.func();function foo() {setTimeout(() => console.log(this.id), 1000);setTimeout(function () {console.log(this.id)}, 2000)}var id = 100;foo.call({id: 10})</script></body>
</html>

  2.5類

2.5.1 必須要用new來實例化, 否則報錯
2.5.2 必須要有constructor構造函數,如果沒有,默認傳入constructor(){}
2.5.3 類的繼承
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Title</title>
</head>
<body><script>// function Timer() {//     this.t1 = 10;// }//// Timer.prototype.showInfo = function () {//     console.lo(this.t1);// }// let timer = new Timer();//////// class Person{//     constructor (uname, uage) {//         this.uname = uname;//         this.uage = uage;//     }//     showInfo() {//         console.log(this.uname, this.uage);//     }// }//// let person = new Person("pizza", 18);// console.log(person.uname);class XiaoHe{constructor (userName, userAge, userAccount=100000) {this.userName = userName;this.userAge = userAge;this.userAccount = userAccount;}}class Peiqi extends XiaoHe{constructor (userName, userAge) {super(userName, userAge);this.userName = userName;this.userAge = userAge;}showInfor() {console.log(this.userName, this.userAge, this.userAccount);}}let peiqi = new Peiqi("peiqi", 18);peiqi.showInfor();</script>
</body>
</html>

  2.6對象的單體模式

2.6.1 解決了箭頭函數中this的指向問題
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Title</title>
</head>
<body><script>var obj = {name: "Pizza",func(){console.log(this.name);}};obj.func();</script></body>
</html>

  

?

轉載于:https://www.cnblogs.com/wangshuyang/p/9875748.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/396308.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/396308.shtml
英文地址,請注明出處:http://en.pswp.cn/news/396308.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

抖音吸粉_抖音吸粉5大實用方法首次分享!輕松實現粉絲10000+

抖音&#xff0c;是一款可以拍短視頻的音樂創意短視頻社交軟件&#xff0c;該軟件于2016年9月上線&#xff0c;是一個專注年輕人音樂短視頻社區。用戶可以通過這款軟件選擇歌曲&#xff0c;拍攝音樂短視頻&#xff0c;形成自己的作品。抖音APP僅推出半年&#xff0c;用戶量就突…

mapper mysql 主鍵_實現通用mapper主鍵策略兼容mysql和oracle

【原創文章&#xff0c;轉載請注明原文章地址&#xff0c;謝謝&#xff01;】1.直接用官方提供的注解方法是無法達到兼容效果的2.跟蹤源碼看看是否有其他方法3.這里有個genSql&#xff0c;可以看一下這個類4.創建一個自定義的處理類實現GenSql(代碼中是我實際項目中用到的策略&…

權限分配界面 純手工 僅用到bootstrap的架構 以及 c標簽

<div class"form-group"> <div class"row"> <label class"col-sm-2 control-label">配置權限</label> <div class"col-sm-10"> <c:forEach var"m" items…

數據管理與數據庫 大學課程_根據數據顯示的50種最佳免費在線大學課程

數據管理與數據庫 大學課程When I launched Class Central back in November 2011, there were around 18 or so free online courses, and almost all of them were from Stanford.當我在2011年11月推出Class Central時&#xff0c;大約有18項免費在線課程&#xff0c;幾乎所有…

每天一個linux命令(12):more命令

more命令&#xff0c;功能類似 cat &#xff0c;cat命令是整個文件的內容從上到下顯示在屏幕上。 more會以一頁一頁的顯示方便使用者逐頁閱讀&#xff0c;而最基本的指令就是按空白鍵&#xff08;space&#xff09;就往下一頁顯示&#xff0c;按 b 鍵就會往回&#xff08;back&…

java 面試題 由淺入深_面試官由淺入深的面試套路

閱讀文本大概需要3分鐘。從上圖看來面試官面試是有套路的&#xff0c;一不小心就一直被套路。0x01&#xff1a;Thread面試官&#xff1a;創建線程有哪幾種方式&#xff1f;應聘者&#xff1a;繼承Thread類、實現Runable接口、使用j.u.c中的線程池面試官&#xff1a;繼承Thread類…

怎么用centos7運行c語言程序_centos如何編譯c語言代碼

centos如何編譯c語言代碼,文件,選項,作用,鏈接,程序 centos如何編譯c語言代碼 易采站長站,站長之家為您整理了centos如何編譯c語言代碼的相關內容。 編譯c,c++代碼 安裝gcc 1、使用如下命令查詢 centos 官方gcc的所有包:yum -list gcc* 可安裝的軟件包gcc.x86_64gcc-c++.x86…

第四篇:基本數據類型及用法(1)

字符串&#xff08;str型&#xff09; -可以做加法&#xff0c;乘法 乘法例&#xff1a; n1"alex" n2n1*3 print(n2) #結果&#xff1a;alexalexalex -首字母大寫: capitalize() -所有字母變小寫: casefold()、lower() #casefold更牛&#xff0c;很多未知的對應關系也…

Android Studio 錯誤集

錯誤列表與解決方案: 1.Android studio Gradle project sync failed Android studio 構建項目出錯 Error:Unable to start the daemon process: could not reserve enough space for object heap.Please assign more memory to Gradle in the projects gradle.properties file.…

需求簡報_代碼簡報:我如何通過做自己喜歡的事情來獲得頂級技術實習

需求簡報Here are three stories we published this week that are worth your time:這是我們本周發布的三個值得您關注的故事&#xff1a; How I landed a top-tier tech internship by doing something I love: 7 minute read 我如何通過做自己喜歡的事情獲得一流的技術實習…

review what i studied `date` - 2017-3-31

在11 月份內&#xff0c;每天的早上6 點到12 點中&#xff0c;每隔2 小時執行一次/usr/bin/httpd.sh 怎么實現0 6-12/2 * 11 * /usr/bin/httpd.shNginx中的ip_hash是指講一個地址的請求永久分發至后端的一臺RealServer&#xff0c;直至這臺RealServer宕機Zabbix和Nagios的工作原…

java string轉long報錯_java.lang.Integer cannot be cast to java.lang.Long解決辦法

你好我是辰兮&#xff0c;本次是項目遇到的java.lang.Integer cannot be cast to java.lang.Long異常以及相對應的解決方案。文章目錄一、實戰問題用postman測試數據報錯&#xff0c;類型轉換異常&#xff01;如何將Integer類型轉換成長整形 &#xff1f;先轉成String型&#x…

pyqt 界面關閉信號_木辛老師的編程課堂之Python和Qt實戰慕課軟件開發:增加關閉按鈕...

軟件實戰開始&#xff0c;快速提供編程能力&#xff1b;通過實戰&#xff0c;分析產品需求&#xff0c;梳理設計需求&#xff0c;提升項目分析和架構的能力。快點跟著木辛老師一起學習吧&#xff01;請點擊右上角“關注”按鈕關注我們喲&#xff1a;跟著木辛老師學習Python編程…

從零開始nodejs系列文章

http://blog.fens.me/series-nodejs/轉載于:https://www.cnblogs.com/chinafbi/p/5394482.html

Leetcode589.N-ary Tree Preorder TraversalN叉樹的前序遍歷

給定一個 N 叉樹&#xff0c;返回其節點值的前序遍歷。 class Node { public:int val;vector<Node*> children;Node() {}Node(int _val, vector<Node*> _children) {val _val;children _children;} };//遞歸 class Solution { public:vector<int> res;vect…

打破雙親委派么,怎么打破_質量保證被打破。 這就是我們如何使其像其他所有東西一樣敏捷。...

打破雙親委派么,怎么打破by Derwin由Derwin 質量保證被打破。 這就是我們如何使其像其他所有東西一樣敏捷。 (Quality Assurance is broken. Here’s how we can make it as agile as everything else.) Process is the key to great software.過程是出色軟件的關鍵。 In gen…

android java.lang.linkageerror_使用eclipse中的maven構建web應用出現 java.lang.LinkageError異常...

????: Servlet.service() for servlet [jsp] in context with path [/webdemo] threw exception [java.lang.LinkageError: loader constraint violation: loader (instance of org/apache/jasper/servlet/JasperLoader) previously initiated loading for a different typ…

android 鍵盤遮蓋輸入框_Android軟鍵盤擋住輸入框的終極解決方案

前言開發做得久了&#xff0c;總免不了會遇到各種坑。而在Android開發的路上&#xff0c;『軟鍵盤擋住了輸入框』這個坑&#xff0c;可謂是一個曠日持久的巨坑——來來來&#xff0c;我們慢慢看。入門篇最基本的情況&#xff0c;如圖所示&#xff1a;在頁面底部有一個EditText&…

最全面的幾何畫板實用教程視頻免費下載

不同的選擇就會有不同的人生夜&#xff0c;這里小編為奮斗在教學一線的老師們送個大福利&#xff0c;這也是老師們充實自己的好去處。作為數學老師一枚&#xff0c;在平時的教學中應該用到很多教學輔助軟件&#xff0c;而幾何畫板就是其中一款。眾所周知&#xff0c;幾何畫板是…

Redis(1):簡介

2019獨角獸企業重金招聘Python工程師標準>>> Redis之父Salvatore Sanfilippo于2009年將Redis開源。VMware公司從2010年開始贊助Redis的開發&#xff0c;Salvatore Sanfilippo和Pieter Noordhuis(另一名主要的代碼貢獻者)同年加入VMware&#xff0c;全職開發Redis。R…