es6的一些知識點

es6的一些知識點

前言:es6(ECMAscript2015)標準es6

let、const、var的一些區別
  • let、const 塊級做用域、全局做用域、函數做用域數組

  • var 全局做用域、函數做用域瀏覽器

變量提高的問題:
var        :  true
let、const : false

例子:安全

console.log(a);//undefind
let a=1;

塊級做用域:例如在一個函數,for循環。。。區塊以內!
const 常量,值不可更改。
let、var 變量,值能夠更改babel

嚴格模式
  • 消除Javascript語法的一些不合理、不嚴謹之處,減小一些怪異行爲;函數

  • 消除代碼運行的一些不安全之處,保證代碼運行的安全;性能

  • 提升編譯器效率,增長運行速度;es5

  • 爲將來新版本的Javascript作好鋪墊。rest

"嚴格模式"體現了Javascript更合理、更安全、更嚴謹的發展方向,包括IE 10在內的主流瀏覽器,都已經支持它,許多大項目已經開始全面擁抱它。code

「use strict」
模板字符串(Template Strings)
  • 規定了一種新的string方法可用 `` 斜引號來建立字符串的代碼塊

  • 綁定變量用${}來綁定。

let name="xiaosan";
        let age=22;
        let home="china"
        let str1=`she's name ${name},
        she age ${age},
        she homes's ${home}`
        alert(str1)
  • 字符串內可直接換行

let str1=`she's name ${name},
        she age ${age},
        she homes's ${home}`
        alert(str1)
  • 標籤模板字符串。

function tag(strings,...args){    //...擴展運算符
           //console.log(strings);
           //console.log(args);
           let str='';
           for(var i=0,l=strings.length-1;i<l;i++){
                str=str+strings[i]+args[i];
           }
           str+=strings[l];
           return str
       }
       let name1="xiaomi";
       let age1=23;
       let str3=tag`
        she's nam1 ${name1}
        she age ${age1}
       `
       console.log(str3)
加強的對象字面量(自變量)
  • 對象屬性可以簡寫;

  • 對象方法能夠簡寫function關鍵字

let name="張三";
        let age=22;
        let zhangshan={
            name,
            age,
            runing(){
                console.log("我會跑")
            }
        }
  • 對象屬性名能夠書寫自動計算形式

  • 原型繼承__proto__

let people={
            eat(){
                console.log("我會吃")
            },
            speak(){
                console.log("我會說話")
            },
            feeling(){
                console.log("我有感情")
            }
        }
        let caowei={
            name:name,
            __proto__:people,//設置對象原型,用來繼承
            study(){
                console.log("I have sutying ok!")
            }
        }
        console.log("my name's"+caowei.name)
        caowei.study();
        caowei.eat();
        caowei.speak();
        caowei.feeling();
         console.log(caowei)
解構賦值
  • es6容許咱們按照必定結構提取數組與對象裏的值,賦給變量

  • 函數的解構賦值

  • 說的明白一點解構賦值它的類型就是數組跟對象
    例子

//數組
        let [a,,c]=[1,2,3];
        console.log(a,c)
//對象
        let obj={
            x:1,
            y:2
        }
        let {x,y}=obj
        console.log(x,y)//1 2
//函數操做
//函數傳對象

        function fn(person){
            let name=person.name;
            let age =person.age;
            console.log(name,age)
        }
        let aa={name:"xiaosan",age:18}
        fn(aa)*/
       /* function fn({uname:name,age,sex="女人"}){
            console.log(name,age,sex)
        }
        let bb={uname:"xiaosan",age:18}
        fn(bb)*/
        //es5 函數傳數組
        /*function fn(Arr){
            let x=Arr[0];
            let y=Arr[1];
            let z=Arr[2];
            console.log(x,y,z)
        }*/
        /*function fn([x,y,z,d=22]){
           
            console.log(x,y,z,d)
        }
        let arr=[9,5,8]
        fn(arr)
//字符串解構賦值

        let str="123456";
        let [a,b,c,d,e,f,g=50]=str;
        console.log(a,b,c,d,e,f,g)
擴展運算符
  • 擴展運算符用三個點號表示,功能是把數組或類數組對象展開成一系列用逗號隔開的值
    操做數組操做對象(自變量對象ps:兼容問題)

//展開數組 
    let arr=[1,2,3]
    let arr2=arr;
   // console.log(arr2);
   document.write(arr2)  //1,2,3
   let arr3=[...arr]   //也能夠看作是拷貝
   console.log(arr3)//( 3) [1 2 3]
   //展開對象

let obj={
    name:"zhangsan",
    age:19,
}
let obj1={
    ...obj,
    sex:"man"
}
console.log(obj1)  //報錯 如今瀏覽器不支持可是方法確實可行能夠採用babel編譯一下使用

//展開函數
function myFunction(x, y, z) {
    console.log(x,y,z)//0 1 2
 }
var args = [0, 1, 2];
myFunction(...args);


function myFunc(a, b, ...rest) {
    console.log(rest.length);//3
}

myFunc(1,2,3,4,5); // => 3

function myFunction(x, y, z,...l) {
    console.log(x,y,z,l)//0 1 2
 }
var args = [0, 1, 2,4,5,6];//0 1 2 (3) [4,5,6]
myFunction(...args);
//數組 與 擴展運算符結合
let c = ["abc",11,12]
let a = [1, 3, 4, 5,c],
    b = [...a, 6, 7, 8, 9]
  // b=a;
console.log(b)//(8) [1,2,3,4,5,6,7,8,9];
箭頭函數=>
  • ES6容許使用「箭頭」(=>)定義函數

var f = v => v

上邊的函數能夠書寫爲

var f = function(v) {
  return v;
};

若是箭頭函數不須要參數或須要多個參數,就使用一個圓括號表明參數部分。

var f = () => 5;
// 等同於
var f = function () { return 5 };

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

若是箭頭函數的代碼塊部分多於一條語句,就要使用大括號將它們括起來,而且使用return語句返回。

var sum = (num1, num2) => { return num1 + num2; }

因爲大括號被解釋爲代碼塊,因此若是箭頭函數直接返回一個對象,必須在對象外面加上括號。

var getTempItem = id => ({ id: id, name: "Temp" });

箭頭函數能夠與變量解構結合使用。

const full = ({ first, last }) => first + ' ' + last;

// 等同於
function full(person) {
  return person.first + ' ' + person.last;
}
默認參數,剩餘參數,擴展參數

參數的默認參數,剩餘參數,拓展參數

//默認參數
         let sayHello=(name,age=25)=>{
             let str=`my name's ${name},age's ${age} old`
            //console.log(name,age)
            console.log(str)//my name's chenxu,age's 25 old
        }
        sayHello("chenxu")

        //擴展參數
        let sum=(a,b,c)=>{
            console.log(a,b,c)
        } 
        let arr=[4,5]          //擴展
        sum(1,...arr)


        //剩餘參數
        let sum1=(a,b,...c)=>{
            console.log(c);
            console.log(a,b)

> 引用文字

;  //剩餘
        }
        sum1(1,2,3,4,5,7,9)
*/
        let sum2=(a,b,...c)=>{
            console.log(c);
            var result=c.reduce((a,b)=>a+b);
            console.log(result);
            console.log(a,b);
        }
        sum2(1,2,3,4,5,7,9)
相關文章
相關標籤/搜索