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>`;