摘要:年月,的創(chuàng)造者公司,決定將提交給國際標(biāo)準(zhǔn)化組織,希望這種語言能夠成為國際標(biāo)準(zhǔn)。這表示外層代碼塊不受內(nèi)層代碼塊的影響。也可以運(yùn)用于函數(shù)及其他文中就簡單介紹這么多,想更加了解新特性的可以自尋查看一下阮一峰的一本入門
ES6新特性
最近在項(xiàng)目中遇到了很多ES6的語法,遇到了不少坑坑洼洼,因此,在這里就簡單介紹一下ES6中的一些新特性
如果想真正的了解ES6和ES5有什么不同,這里推薦看一下阮一峰的一本《ECMAScript 6 入門》
在我下面,主要介紹一下ES6標(biāo)準(zhǔn)下的let, const, "=>", "..."的介紹和用法
ES6背景介紹ECMAScript 6.0(以下簡稱 ES6)是 JavaScript 語言的下一代標(biāo)準(zhǔn),已經(jīng)在2015年6月正式發(fā)布了。它的目標(biāo),是使得 JavaScript 語言可以用來編寫復(fù)雜的大型應(yīng)用程序,成為企業(yè)級(jí)開發(fā)語言。
那么,ECMAScript 和 JavaScript 到底是什么關(guān)系?
要講清楚這個(gè)問題,需要回顧歷史。1996年11月,JavaScript 的創(chuàng)造者 Netscape 公司,決定將 JavaScript 提交給國際標(biāo)準(zhǔn)化組織ECMA,希望這種語言能夠成為國際標(biāo)準(zhǔn)。次年,ECMA 發(fā)布262號(hào)標(biāo)準(zhǔn)文件(ECMA-262)的第一版,規(guī)定了瀏覽器腳本語言的標(biāo)準(zhǔn),并將這種語言稱為 ECMAScript,這個(gè)版本就是1.0版
let命令 基本用法ES6 新增了let命令,用來聲明變量。它的用法類似于var,但是所聲明的變量,只在let命令所在的代碼塊內(nèi)有效。
{ let a = 10; var b = 1; } a // ReferenceError: a is not defined. b // 1
上面代碼在代碼塊之中,分別用let和var聲明了兩個(gè)變量。然后在代碼塊之外調(diào)用這兩個(gè)變量,結(jié)果let聲明的變量報(bào)錯(cuò),var聲明的變量返回了正確的值。這表明,let聲明的變量只在它所在的代碼塊有效。看到這里,是不是覺得let和C語言還有其他語言的語言很像了呢,確實(shí),其實(shí)原理基本都差不多。
使用注意不存在變量提升:var命令會(huì)發(fā)生”變量提升“現(xiàn)象,即變量可以在聲明之前使用,值為undefined。這種現(xiàn)象多多少少是有些奇怪的,按照一般的邏輯,變量應(yīng)該在聲明語句之后才可以使用。為了糾正這種現(xiàn)象,let命令改變了語法行為,它所聲明的變量一定要在聲明后使用,否則報(bào)錯(cuò)。
// var 的情況 console.log(foo); // 輸出undefined var foo = 2; // let 的情況 console.log(bar); // 報(bào)錯(cuò)ReferenceError let bar = 2;
暫時(shí)性死區(qū):只要塊級(jí)作用域內(nèi)存在let命令,它所聲明的變量就“綁定”(binding)這個(gè)區(qū)域,不再受外部的影響。
var tmp = 123; if (true) { tmp = "abc"; // ReferenceError let tmp; }
不允許重復(fù)聲明:let不允許在相同作用域內(nèi),重復(fù)聲明同一個(gè)變量。
// 報(bào)錯(cuò) function () { let a = 10; var a = 1; } // 報(bào)錯(cuò) function () { let a = 10; let a = 1; }
快級(jí)作用域:這個(gè)特性是我覺得最奇怪的,原本javascript是作用域鏈的形式,為什么無緣無故要突然改變了自己之前的主意呢。不過這個(gè)也很容易理解,有過C語言和C++等語言基礎(chǔ)的就會(huì)很了解快級(jí)作用域
function f1() { let n = 5; if (true) { let n = 10; } console.log(n); // 5 }
上面的函數(shù)有兩個(gè)代碼塊,都聲明了變量n,運(yùn)行后輸出5。這表示外層代碼塊不受內(nèi)層代碼塊的影響。如果兩次都使用var定義變量n,最后輸出的值才是10。
const命令 基本用法const聲明一個(gè)只讀的常量。一旦聲明,常量的值就不能改變。const聲明的變量不得改變值,這意味著,const一旦聲明變量,就必須立即初始化,不能留到以后賦值。
const PI = 3.1415; PI // 3.1415 PI = 3; // TypeError: Assignment to constant variable.使用注意
僅僅保證地址不變const實(shí)際上保證的,并不是變量的值不得改動(dòng),而是變量指向的那個(gè)內(nèi)存地址不得改動(dòng)。對(duì)于簡單類型的數(shù)據(jù)(數(shù)值、字符串、布爾值),值就保存在變量指向的那個(gè)內(nèi)存地址,因此等同于常量。
const a = []; a.push("Hello"); // 可執(zhí)行 a.length = 0; // 可執(zhí)行 a = ["Dave"]; // 報(bào)錯(cuò)箭頭函數(shù)"=>" 基本用法
ES6 允許使用“箭頭”(=>)定義函數(shù)
var f = v => v; //等同于 var f = function(v) { return v; };使用注意
函數(shù)體內(nèi)的this對(duì)象,就是定義時(shí)所在的對(duì)象,而不是使用時(shí)所在的對(duì)象。
不可以當(dāng)作構(gòu)造函數(shù),也就是說,不可以使用new命令,否則會(huì)拋出一個(gè)錯(cuò)誤。
不可以使用arguments對(duì)象,該對(duì)象在函數(shù)體內(nèi)不存在。如果要用,可以用 rest 參數(shù)代替。
不可以使用yield命令,因此箭頭函數(shù)不能用作 Generator 函數(shù)。
這里說一下最重要的第一點(diǎn)吧
function foo() { setTimeout(() => { console.log("id:", this.id); }, 100); } var id = 21; foo.call({ id: 42 }); // id: 42
上面代碼中,setTimeout的參數(shù)是一個(gè)箭頭函數(shù),這個(gè)箭頭函數(shù)的定義生效是在foo函數(shù)生成時(shí),而它的真正執(zhí)行要等到100毫秒后。如果是普通函數(shù),執(zhí)行時(shí)this應(yīng)該指向全局對(duì)象window,這時(shí)應(yīng)該輸出21。但是,箭頭函數(shù)導(dǎo)致this總是指向函數(shù)定義生效時(shí)所在的對(duì)象(本例是{id: 42}),所以輸出的是42。
數(shù)組拓展運(yùn)算符"..." rest 參數(shù) 基本用法擴(kuò)展運(yùn)算符(spread)是三個(gè)點(diǎn)(...)。它好比 rest 參數(shù)的逆運(yùn)算,將一個(gè)數(shù)組轉(zhuǎn)為用逗號(hào)分隔的參數(shù)序列。
console.log(...[1, 2, 3]) // 1 2 3 console.log(1, ...[2, 3, 4], 5) // 1 2 3 4 5 [...document.querySelectorAll("div")] // [,,]也可以運(yùn)用于函數(shù)及其他
function add(...values) { let sum = 0; for (var val of values) { sum += val; } return sum; } add(2, 5, 3) // 10文中就簡單介紹這么多,想更加了解ES6新特性的可以自尋查看一下阮一峰的一本《ECMAScript 6 入門》
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/84354.html
相關(guān)文章
雙十二大前端工程師讀書清單
摘要:本文最早為雙十一而作,原標(biāo)題雙大前端工程師讀書清單,以付費(fèi)的形式發(fā)布在上。發(fā)布完本次預(yù)告后,捕捉到了一個(gè)友善的吐槽讀書清單也要收費(fèi)。這本書便從的異步編程講起,幫助我們?cè)O(shè)計(jì)快速響應(yīng)的網(wǎng)絡(luò)應(yīng)用,而非簡單的頁面。 本文最早為雙十一而作,原標(biāo)題雙 11 大前端工程師讀書清單,以付費(fèi)的形式發(fā)布在 GitChat 上。發(fā)布之后在讀者圈群聊中和讀者進(jìn)行了深入的交流,現(xiàn)免費(fèi)分享到這里,不足之處歡迎指教...
雙十二大前端工程師讀書清單
摘要:本文最早為雙十一而作,原標(biāo)題雙大前端工程師讀書清單,以付費(fèi)的形式發(fā)布在上。發(fā)布完本次預(yù)告后,捕捉到了一個(gè)友善的吐槽讀書清單也要收費(fèi)。這本書便從的異步編程講起,幫助我們?cè)O(shè)計(jì)快速響應(yīng)的網(wǎng)絡(luò)應(yīng)用,而非簡單的頁面。 本文最早為雙十一而作,原標(biāo)題雙 11 大前端工程師讀書清單,以付費(fèi)的形式發(fā)布在 GitChat 上。發(fā)布之后在讀者圈群聊中和讀者進(jìn)行了深入的交流,現(xiàn)免費(fèi)分享到這里,不足之處歡迎指教...
雙十二大前端工程師讀書清單
摘要:本文最早為雙十一而作,原標(biāo)題雙大前端工程師讀書清單,以付費(fèi)的形式發(fā)布在上。發(fā)布完本次預(yù)告后,捕捉到了一個(gè)友善的吐槽讀書清單也要收費(fèi)。這本書便從的異步編程講起,幫助我們?cè)O(shè)計(jì)快速響應(yīng)的網(wǎng)絡(luò)應(yīng)用,而非簡單的頁面。 本文最早為雙十一而作,原標(biāo)題雙 11 大前端工程師讀書清單,以付費(fèi)的形式發(fā)布在 GitChat 上。發(fā)布之后在讀者圈群聊中和讀者進(jìn)行了深入的交流,現(xiàn)免費(fèi)分享到這里,不足之處歡迎指教...
發(fā)表評(píng)論
0條評(píng)論
Nino
男|高級(jí)講師
TA的文章
閱讀更多
10g.biz九月促銷:美國站群首月半價(jià),香港獨(dú)服1.5折;香港+美國CN2 GIA線路云服務(wù)器$2
閱讀 2043·2021-09-07 10:14
CSS3幀動(dòng)畫
閱讀 1477·2019-08-30 15:53
css--布局
閱讀 2270·2019-08-30 12:43
思否網(wǎng)站隨屏幕大小自動(dòng)發(fā)生變化
閱讀 2861·2019-08-29 16:37
移動(dòng)端網(wǎng)頁布局適配rem方案小結(jié)
閱讀 754·2019-08-26 13:29
學(xué)習(xí)JavaScript的原型筆記
閱讀 2000·2019-08-26 13:28
javascript 異步編程
閱讀 437·2019-08-23 18:33
解決<el-checkbox-group> 數(shù)據(jù)與UI更新不同步的坑
閱讀 3500·2019-08-23 16:09