一观谦、關(guān)于定義(聲明)變量
之前用的:var a=12
有個作用域的問題
全局:容易污染全局
函數(shù)作用域:在函數(shù)里起作用(局部變量)
新的定義變量(let和const)
let:相當(dāng)于之前的var eg:let a=12疫剃;
const:常量。定義好了不能改變
let和const定義的變量是具備塊級作用域涉瘾。所謂塊級作用域可以理解為{}內(nèi)就是一個塊
eg:if(true){
var a=12
}
alert(a) //12 全局作用域知态,所以在外面也能訪問到
eg:if(true){
let a=12
}
alert(a) //not defined 塊級只能在里面使用,外面訪問不到
let注意(與var的不同)
1. 沒有預(yù)解析立叛,不存在變量提升
在代碼塊內(nèi)负敏,只要let定義變量在定義之前使用都是報錯
先定義完先使用
eg:let a=12
function fn{
alert(a) //a沒有定義
let a=5
}
fn()
eg:var a=12
function fn{
alert(a) //undefined
var a=5 //聲明會提前
}
fn()
2. 同一個作用域里不能重復(fù)定義變量
eg:let a=12
let a=5
alert(a) //a已經(jīng)被定義過了
3. for循環(huán)。for循環(huán)里面是父級作用域秘蛇,{}里面又是一個
eg:for(let i=0;i<10;i++){
let i=“abc” //這里聲明的let不會報錯
console.log(i) //輸出10次abc
//()里面的i和{}里聲明的i不在同一個作用域
}
const:特性和 let一樣
區(qū)別在于:const定義變量不能修改
const定義完變量必須有值其做。不能后賦值不能修改
eg:const a
a=5 alert(a) //報錯
const定義一個數(shù)組或?qū)ο笫强梢孕薷牡模瑢ο蟊旧硎且粋€引用關(guān)系赁还,如果想定義一個對象不能動妖泄,es6提供了一個Object.freeze()方法
eg:const arr=Object.freeze([1,2])
arr.push(3)
console.log(arr) //這個對象不能被擴(kuò)展
注意:用var定義一個全局變量屬于window。let和const不屬于
二艘策、解構(gòu)賦值
let a=12浮庐; let b=5;let c=6柬焕;
console.log(a,b,c) //12,5,7
可以解構(gòu)賦值為:
let [a,b,c]=[12,5,6]
console.log(a,b,c) //12,5,6
注意:左右兩邊結(jié)構(gòu)格式要保持一致
解構(gòu)的時候還可以給默認(rèn)值 let [a,b,c=3]=[1,2]
解構(gòu)賦值還可以用來交換兩個數(shù)的位置
eg:let a=12审残,b=5 //現(xiàn)在讓a和b交換
[a,b]=[b,a]
console.log(a,b) //5,12
三、字符串模版
優(yōu)點:可以隨意換行
之前用的是字符串連接“呔伲現(xiàn)在es6提供了字符串模版
es7新增字符串方法
- 字符串查找
之前用的indexof現(xiàn)在新增str.includes(要找的東西)搅轿。返回true或false - 字符串檢測是否以誰開頭
之前都用正則。現(xiàn)在新增str.startsWith(檢測的東西)富玷。返回true或false
3.字符串是否以誰結(jié)尾
str.endsWith(檢測東西)
4.重復(fù)字符串
str.repeat(次數(shù))
四璧坟、函數(shù)變化
1.函數(shù)參數(shù)可以給默認(rèn)值
2.函數(shù)參數(shù)默認(rèn)已經(jīng)定義了,不能再使用let赎懦,const聲明
eg:function show(a=18){
let a=101 //錯誤
console.log(a) //報錯
}
show()
- 擴(kuò)展運算符(...)
eg:[1,2,3,4]—>...[1,2,3,4]—>1,2,3,4
1,2,3,4,5–>...1,2,3,4,5–>[1,2,3,4,5]
剩余參數(shù):必須放到最后
eg:function show(a,b,...c){ //...c只能放到最后
console.log(a,b) //1,2
console.log(c) //[3,4,5]
}
show(1,2,3,4,5) - 箭頭函數(shù)
語法 ()=>{ 語句 }
注意:
1. this問題雀鹃,定義函數(shù)所在的對象,不再是運行時(誰被調(diào)用)所在的對象
2. 箭頭函數(shù)里面沒有arguments励两,用’...’
3. 箭頭函數(shù)不能當(dāng)構(gòu)造函數(shù)