前言:es6(ECMAscript2015)標準es6
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」
規定了一種新的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)