前端面試準(zhǔn)備,對(duì)于成ィ考的es6新特性做一點(diǎn)記錄做入。
一、概念
首先同衣,啥是es6竟块,es是啥?跟js什么關(guān)系耐齐?
ECMAScript是一種由Ecma國(guó)際通過(guò)ECMA-262標(biāo)準(zhǔn)化的腳本程序設(shè)計(jì)語(yǔ)言浪秘。這種語(yǔ)言在萬(wàn)維網(wǎng)上應(yīng)用廣泛,它往往被稱為JavaScript或JScript埠况,所以它可以理解為是JavaScript的一個(gè)標(biāo)準(zhǔn),但實(shí)際上后兩者是ECMA-262標(biāo)準(zhǔn)的實(shí)現(xiàn)和擴(kuò)展耸携。
所以,ECMAscript是一個(gè)標(biāo)準(zhǔn)辕翰,js則是對(duì)它的實(shí)現(xiàn)夺衍,
而es6就是ECMAscript的第六個(gè)版本。
它的目標(biāo)是使得JavaScript語(yǔ)言可以用來(lái)編寫復(fù)雜的大型應(yīng)用程序喜命,成為企業(yè)級(jí)開發(fā)語(yǔ)言沟沙。
二河劝、新特性
es6有許多新特性,這使它區(qū)別于之前的所有版本矛紫。
- 增加了關(guān)鍵字let赎瞎、const
1、var聲明
1.1支持變量提升
console.log(c);
var c = 'c';
結(jié)果為undefined颊咬,但不會(huì)報(bào)錯(cuò)煎娇,這是因?yàn)閖s支持預(yù)解析,且var聲明支持變量提升贪染。
預(yù)解析:在當(dāng)前作用域下缓呛,js運(yùn)行之前,會(huì)把帶有var和function關(guān)鍵字的事先聲明杭隙,并在內(nèi)存中安排好哟绊。然后再?gòu)纳系较聢?zhí)行js語(yǔ)句。預(yù)解析只會(huì)發(fā)生在通過(guò)var定義的變量和function上痰憎。
詳解看這篇博客
變量提升:JavaScript 中票髓,變量可以在使用后聲明,也就是變量可以先使用再聲明铣耘。
1.2支持同一作用域下重復(fù)定義同一名稱
var d = 1;
var d = 100;
console.log(d);
結(jié)果為d = 100洽沟,不會(huì)報(bào)錯(cuò),var聲明支持同一名稱重復(fù)聲明蜗细,除了第一次的聲明裆操,之后的只是單純賦值。
1.3作用于函數(shù)作用域
es6之前炉媒,只有函數(shù)作用域踪区。es6開始,多了塊級(jí)作用域吊骤。
塊級(jí)作用域:一個(gè)大括號(hào)內(nèi)的范圍是一個(gè)塊級(jí)作用域缎岗。
- var屬于函數(shù)作用域。
- let屬于塊級(jí)作用域白粉。
2传泊、let聲明
與var聲明相反,let聲明
- 不存在變量提升
- 同一個(gè)作用域下不能重復(fù)定義同一個(gè)名稱
- 有嚴(yán)格的作用域
console.log(c);
let c = 'c';
這樣寫執(zhí)行會(huì)報(bào)錯(cuò)鸭巴。
let d = 1;
let d = 100;
console.log(d);
這樣寫執(zhí)行會(huì)報(bào)錯(cuò):d已經(jīng)定義眷细。
3、const聲明
const聲明一個(gè)只讀的常量奕扣,常量一旦聲明薪鹦,就不能改變。
const d = 1;
d = 100; // error
console.log(d);
這樣寫會(huì)報(bào)錯(cuò),const聲明的常量不能二次賦值池磁。
const d;
這樣寫會(huì)報(bào)錯(cuò)奔害,const聲明一定要初始化,不能只聲明不賦值地熄。
但當(dāng)聲明的是對(duì)象時(shí)华临,const代表對(duì)象的內(nèi)存地址不能改變,對(duì)象的內(nèi)容是可以改變的端考。這樣寫不會(huì)報(bào)錯(cuò)雅潭。
const obj = {};
obj.name = 'alice';
同理,對(duì)數(shù)組也是一樣却特,僅是內(nèi)存地址不能變扶供,數(shù)組內(nèi)容是可變的。
另外裂明,和let聲明一樣椿浓,cosnt聲明也具備以下特點(diǎn):
- 不存在變量提升
- 同一個(gè)作用域下不能重復(fù)定義同一個(gè)名稱
- 有嚴(yán)格的作用域