ES6新特性

塊級(jí)作用域let和const

let聲明變量,const聲明常量;都是塊級(jí)作用域

//通常用var聲明的變量,會(huì)有變量提升例如: 
!function(bool){
    if(bool){
        var test='test';
    }else{
        console.log(test);//undefined,說(shuō)明test變量確實(shí)是被申明了,否者會(huì)打印test is not defined
    }
}(false)

!function(bool){
    if(bool){
        let test='test';
    }else{
        console.log(test)//is not defined ,說(shuō)明test未被申明,
        //只存在if(bool){ let test='test';}作用域里面,可以理解為{}里面即是申明變量的作用域
    }
}(false)

//const申明常量,改變其值,會(huì)報(bào)錯(cuò),例如:
const name='ouyang';
name='wei';// Assignment to constant variable.

var arr=[];
for(var i=0;i<10;i++){
    arr.push(
        function(){
            console.log(i);
        }
    )
}
arr.forEach(function(fun){
    fun();//10次10,只就是var申明i導(dǎo)致的,循環(huán)10,i的值一直在改變;
})

//如果用let來(lái)申明i,又會(huì)怎么樣呢?
var arr=[];
for(let i=0;i<10;i++){
    arr.push(
        function(){
            console.log(i);
        }
    )
}
arr.forEach(function(fun){
    fun();//從0打印到9,這說(shuō)明用let的變量的作用域,
    //只存在function(){console.log(i)};
})

//又或者用閉包來(lái)寫(xiě)
var arr=[];
for(var i=0;i<10;i++){
    arr.push(
        (function(args){
            return function(){
                console.log(args);
            }
        })(i)
    )
};
console.log(arr);
arr.forEach(function(fun){
    fun();
})

模板字符串

拼接字符串 用${}來(lái)劃界

//${}字符串拼接
//es5
var name='ouyang';
console.log(name+'wei');//ouyangwei
//es6
console.log(`${name}wei`);//ouyangwei注意用``

反引號(hào)``

//es5用反斜來(lái)拼接多行字符
var text='hello \
ouyang';
console.log(text);//hello ouyang
//es6直接用反引號(hào)
var words=`hello 
world!`
console.log(words);//hello(換行)
//world!
// 1.includes:判斷是否包含然后直接返回布爾值
let str = 'hahay'
console.log(str.includes('y')) // true
// 2.repeat: 獲取字符串重復(fù)n次
let s = 'he'
console.log(s.repeat(3)) // 'hehehe'
 //如果你帶入小數(shù), Math.floor(num) 來(lái)處理

變量的解構(gòu)賦值

es6 允許按照一定模式,從數(shù)組和對(duì)象中提取值,對(duì)變量進(jìn)行賦值,這被稱(chēng)為解構(gòu)

\\數(shù)組解構(gòu)賦值
let [a,b,c]=[1,2,3];
\\對(duì)象解構(gòu)
let {foo,bar}={foo:"aaa",bar:"bbb"}
\\字符串解構(gòu)
const [a, b, c, d, e] = 'hello';
a // "h"
b // "e"
c // "l"
d // "l"
e // "o"

寫(xiě)法屬于“模式匹配”,只有等號(hào)兩邊的模式相同,左邊的變量就會(huì)被賦予相應(yīng)的值,如果解構(gòu)不成功,變量的值就等于undefined

let [foo, [[bar], baz]] = [1, [[2], 3]];
foo // 1
bar // 2
baz // 3

let [ , , third] = ["foo", "bar", "baz"];
third // "baz"

let [x, , y] = [1, 2, 3];
x // 1
y // 3

let [head, ...tail] = [1, 2, 3, 4];
head // 1
tail // [2, 3, 4]

let [x, y, ...z] = ['a'];
x // "a"
y // undefined
z // []

不完全解構(gòu),即左邊的變量,與右邊的值個(gè)數(shù)不匹配,能匹配幾個(gè)就是幾個(gè)

let [x, y] = [1, 2, 3];
x // 1
y // 2

let [a, [b], d] = [1, [2, 3], 4];
a // 1
b // 2
d // 4

函數(shù)

默認(rèn)值
//默認(rèn)值
function fun(num){
    var num=num||20;
    console.log(num);
}
fun(0)//20因?yàn)?被當(dāng)成false;
//es6的默認(rèn)值問(wèn)題
function fun1(num=20){
    var num=num;
    console.log(num);
}
fun1(0)//0
//與解構(gòu)賦值默認(rèn)值結(jié)合使用
function foo({x,y=5}){
  console.log(x,y);
}
foo({})//undefined 5
foo({x:1})// 1 5
foo({x:1,y:2})//1 2
foo()//typeError:Cannot red property 'x' of undefined
rest 參數(shù)

ES6引入rest參數(shù)(形式為:...變量名),用戶(hù)獲取函數(shù)的多余參數(shù),rest參數(shù)搭配的變量是一個(gè)數(shù)組,改變量講多余的參數(shù)放入數(shù)組中,可以替換arguments

function add(...values){
  let sum=0;
  for(var val of values){
    sum+=val;
  }
  return sum;
}
add(2,5,3)
name屬性

函數(shù)name屬性,返回該函數(shù)的函數(shù)名

 function foo(){}
foo.name//foo
箭頭函數(shù)(=>)

箭頭函數(shù),例子:

var f=v => v
//等同于
var f=function(v){
  return v;
}
//多個(gè)參數(shù)或不需要參數(shù)的時(shí)候,使用園括號(hào)
var f = () => 5
//等同于
var f=function(){
  return 5;
}
var sum=(num1,num2) => num1+num2;
//等同于
var sum=function(num1,num2){
  return num1+num2;
}

如果要返回對(duì)象,必須在對(duì)象外面加上括號(hào)

let getTempItem = id => ({id:id,name:'temp'});
//等同于
let getTempItem=function(id){
  return {
    id:id,
    name:'temp'
  }
}

箭頭函數(shù)this的指向問(wèn)題,函數(shù)體內(nèi)的this對(duì)象,就是定義時(shí)所在的對(duì)象,而不是使用時(shí)所在的對(duì)象

function foo(){
    setTimeout(function(){
        console.log('id:',this.id);
    },1000);
}
var id=21;
foo.call({id:42});//id:21
//setTimeout全局函數(shù),this指向全局變量
//如果換成箭頭函數(shù)呢?
function fun(){
    setTimeout(()=>{
        console.log('id:',this.id);
    },1000);
}

fun.call({id:42});//id:42
//說(shuō)明箭頭函數(shù)this指向其定義的對(duì)象
對(duì)象表達(dá)式
const foo = 'bar';
const baz = {foo};
baz // {foo: "bar"}

// 等同于
const baz = {foo: foo};
promise對(duì)象

promise異步編程的一種解決方案,比傳統(tǒng)的解決方案,回調(diào)函數(shù)和事件,更合理和強(qiáng)大。
所謂promise,簡(jiǎn)單來(lái)說(shuō)就是一個(gè)容器,里面保存著某個(gè)未來(lái)才會(huì)結(jié)束的事件(通常是一個(gè)異步操作)的結(jié)果。promise是一個(gè)對(duì)象,從它可以獲取異步操作的消息。promise提供統(tǒng)一的api,各種異步操作都可以用同樣的方法進(jìn)行處理。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀(guān)點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • let和const命令 var:聲明變量,更多的是全局作用域,存在變量提升 let:聲明變量,存在于塊級(jí)作用域,不...
    zhangivon閱讀 2,561評(píng)論 1 13
  • ECMAScript 6.0(以下簡(jiǎn)稱(chēng)ES6)是、JavaScript語(yǔ)音的下一代標(biāo)準(zhǔn),已經(jīng)在2015年6月正式發(fā)...
    Leisure_blogs閱讀 557評(píng)論 1 2
  • 大家好,我是IT修真院成都分院第8期的學(xué)員,一枚正直純潔善良的WEB前端程序員。今天給大家分享一下ES6新特性。 ...
    備用的昵稱(chēng)閱讀 412評(píng)論 0 1
  • 首先感謝Carnia幫我指出ES6箭頭函數(shù)中this指向的錯(cuò)誤,此次主要更新箭頭函數(shù)中this指向問(wèn)題。 ECMA...
    范小飯_閱讀 9,341評(píng)論 7 21
  • 2017年3月14日(星期二)下午,高一政治組全體教師結(jié)合學(xué)校轉(zhuǎn)型發(fā)展的新形式,開(kāi)展了一次深入的教學(xué)研討會(huì)。...
    三木1閱讀 516評(píng)論 0 1

友情鏈接更多精彩內(nèi)容