1.let,const
首先我们来看一下,var 变量会导致变量的提升,声明提前,例如:
function test() {
if (bool) {
var str
// 变量提升
str = 'test'
} else {
//为undefined
console.log(str)
}
}
然而 let 和 const是块级作用域,let是变量,const是一个常量,只在当前作用域生效,也就是当前 {} 中
function test() {
if (bool) {
let str = 'test'
} else {
//获取不到str
console.log(str)
}
}
const身为常量是不支持再次重新定义修改的,如果是对象的某个属性改动是可以的,因为本质上,const指向的内存地址尚未改变
1.1 let处理闭包问题
// ES5利用闭包解决这个问题
var funcs = []
for (var i = 0; i < 10; i++) {
funcs.push(
(function(value) {
return function() {
console.log(value)
}
})(i)
)
}
funcs.forEach(function(func) {
func()
})
// es6解决
const funcs = []
for (let i = 0; i < 10; i++) {
funcs.push(function() {
console.log(i)
})
}
funcs.forEach(func => func())
1.2 模板代替字符串
字符串的拼接,字符串需要+进行拼串,es6提供字符串模板,``中可以进行字符串编写,去除冗杂的代码
// es5
var str = 'hello';
console.log(str+'world!');
// es6
const str = 'hello';
console.log(`${str}world!`);
1.3 其他用法
// 1.includes:判断是否包含然后直接返回布尔值
const str = 'hahay'
console.log(str.includes('y'))
// true
// 2.repeat: 获取字符串重复n次
const str = 'he'
console.log(str.repeat(3))
// 'hehehe'
//如果你带入小数, Math.floor(num) 来处理
// s.repeat(3.1) 或者 s.repeat(3.9) 都当做成 s.repeat(3) 来处理
// 3. startsWith 和 endsWith 判断是否以 给定文本 开始或者结束
const str = 'hello world!'
console.log(str.startsWith('hello'))
// true
console.log(str.endsWith('!'))
// true
未完待续。。。