1、es6變量聲明const和let
es6之前都是用var聲明變量,es6用const和let來聲明,let表示變量,const表示常量。let和const都是塊級作用域。
塊級作用域是理解是:
- 在一個函數內部
- 在一個代碼塊內部
只要再{}花括號的代碼塊都可以任務let和const的作用域
let代碼如下:
let作用域是再它當前的代碼塊,但是不會提升到當前函數的最頂部
function aa(){
if(flag){
let test="hello man"
}else{
//test在此處訪問不到
console.log(test);
}
}
const
- const聲明的變量必須提供一個值,認爲是常量,意思是他的值被設置以後就不能修改了,否則會報錯、
const name='zhangsan' name='joe' //再次賦值會報錯
- 如果const是一個對象,對象包含的值是可以被修改的,抽象一點兒說,就是對象指向的地址不能改變,變量成員是可以更改的。
const student={name:'zhangsan'}
student.name='wangwu'//ok 變量的值可以更改
student={name:'sfda'}//錯誤,指針的地址不可用更改
TDZ(暫時性死區)
js引擎掃描代碼的時候,如果發現變量聲明,用var聲明的變量會將聲明提升到函數或者全局作用域的頂部,但是let和const不會,會將聲明關進一個小黑屋,也是TDZ,只有執行到變量聲明這句代碼的時候,變量纔會從小黑屋釋放出來,纔可以安全的使用這個變量。
{
console.log(value)//報錯
let value='ddd'
}
2、字符串
es6模板字符串,解決了es5在字符串功能上的痛點。
- 基本的字符串格式化,將表達式嵌入字符串中進行拼接,用${}來界定
//es5 var name='wangsan' console.log('hello'+name); //es6 const name='xingxing' const age='23歲' console.log(`hello,${name}今年的年齡是${age}`)
- 在es5我們通過反斜槓(\)來做多行字符串或者字符串一行行拼接,es6用引號搞定
// ES5 var msg = "Hi \ man! "; // ES6 const template = `<div> <span>hello world</span> </div>`;