let 关键字
let 关键字用来声明变量,使用 let 声明的变量有几个特点:
- 不允许重复声明
- 块儿级作用域
- 不存在变量提升
- 不影响作用域链
// let 声明变量
// console.log(a); //error: Cannot access 'a' before initialization
let a = 10;
// let a = false; // error: Identifier 'a' has already been declared
if (true) {
let b = 10;
}
// console.log(b); // error:b is not defined
for (let index = 0; index < 10; index++) {
}
// console.log(index); // error: index is not defined
应用场景:以后声明变量使用 let 就对了
const 关键字
const 关键字用来声明常量,const 声明有以下特点
-
声明必须赋初始值
-
标识符一般为大写
-
不允许重复声明
-
值不允许修改
-
块儿级作用域
// const 定义常量 // 1.不会变量提升 // console.log(a); // error Cannot access 'a' before initialization // 2.必须有初始值 const a = 10; // 3.基本类型的值不能修改 // a = false; // error: 基本类型的值不能修改 // 4.块级作用域 // 5.不能重复声明 if (true) { const x = 'hello world'; } // console.log(x); // error: x is not defined for (const index = 0; index < 10; index++) { // const w = 10; // 重复定义 } // 引用类型 const obj = { name: 'admin', age: 18, }; obj.name = '张三'; obj.height = 1.83; const arr = [1, 2, 3, 4, 5, 6]; arr[0] = 10; console.log(obj, arr);
注意: 对象属性修改和数组元素变化不会触发 const 错误
应用场景:声明对象、数组类型、以及常量时使用 const,非对象类型声明选择 let
变量的解构赋值
ES6 允许按照一定模式,从数组和对象中提取值,对变量进行赋值,这被称为解构赋值
//数组的解构赋值:将数组中的元素安装顺序取出来,通过=赋默认值
const arr = ['张学友', '刘德华', '黎明', '郭富城'];
const [one, two, three, four, five = '没有这个人'] = arr;
console.log(one, two, three, four, five);
// 对象的解构赋值:通过属性名进行解构赋值,=默认值
const lin = {
name: '林志颖',
tags: ['车手', '歌手', '小旋风', '演员'],
};
const {
tags, name, age = 18 } = lin;
console.log(tags, name, age);
//复杂解构
const wangfei = {
name: '王菲',
age: 18,
songs: ['红豆', '流年', '暧昧', '传奇'],
history: [{
name: '窦唯' }, {
name: '李亚鹏' }, {
name: '谢霆锋' }