1、变量声明let和const
在es6之前,声明变量都是用var关键字,无论声明在何处,都会被视为声明在函数的最顶部,或者是在全局作用域的最顶部,这就是变量提升,例如:
function fun(bool) { if (bool) { var test = ‘hello man‘ console.log(test) } else { console.log(test) } } fun() // undefined fun(true) // hello man
以上代码实际为:
function fun1(bool) { var test // 变量提升 if (bool) { test = ‘hello man‘ console.log(test) } else { //此处访问test 值为undefined console.log(test) } //此处访问test 值为undefined } fun1() // undefined fun1(true) // hello man
所以,不管bool是否为true或false,test都会被声明。如果用了var关键字,那就是局部变量;如果没有用var关键字,就是全局变量,特么的这就是所谓的变量提升。
接下来,es6的let和const登场,let表示变量,const表示常量,let和const都是块级作用域。怎么理解这个块级作用域?
其实就是 {} 内的代码块就是let和const的作用域
function fun(bool) { if (bool) { let test = ‘hello man‘ console.log(test) } else { //test 在此处访问不到 console.log(test) // 报错:test is not defined } } fun(true) fun()
const就是一旦定义过的变量不可以再次赋值:
const name = ‘吴小明‘ console.log(name) name = ‘孙艺珍‘ console.log(name) // 报错:Assignment to constant variable
但是要注意:const定义的变量,如果是引用类型的话,这个变量的值是可以改变的,但是这个变量的引用不可以改变,例如:
const person = { name: ‘吴小明‘, age: 18 } console.log(person) // {name: "吴小明", age: 18} person.name = ‘孙艺珍‘ console.log(person) // {name: "孙艺珍", age: 18} person = { name: ‘孙艺珍‘ } console.log(person) // 报错:Assignment to constant variable
const arr = [1, 2, 3] console.log(arr) // [1, 2, 3] arr[1] = 20 console.log(arr) // [1, 20, 3] arr = [10, 20, 30] console.log(arr) // 报错:Assignment to constant variable
2、模板字符串
这个语法很好的解决了es5在字符串功能上的痛点,而且写法更简单了。
第一个用途:基本的字符串格式化,将表达式嵌入字符串中进行拼接,用 ${} 来界定
// es5 let name = ‘吴小明‘ console.log(‘姓名:‘ + name) // es6 let age = 18 console.log(`年龄:${age}岁`)
第二个用途,多行字符串拼接:
const template = `<div> <span>hello world</span> <span>hello world</span> <span>hello world</span> <span>hello world</span> </div>`
es6还有一些其他的常用的字符串的方法,例如:
let name = ‘吴小明‘ console.log(name.includes(‘吴‘)) // true console.log(name.includes(‘孙‘)) // false console.log(name.repeat(3)) // 吴小明吴小明吴小明
3、函数
原文:https://www.cnblogs.com/wuqilang/p/13475803.html