1.let和conts命令
let指令
概念:
1.let 没有变量提升的说法 所以没有预解析的说法
2.let 有局部作用域的说法和var作用不同的是 var 的作用域仅在函数中有效 let 所有{} 都有效
3.let 暂时性死区 说的就是 必须要先声明在使用 否则就会死区
4.let 不能重复声明 和java一样
代码示例:
// 使用 let 声明变量
let x = 10;
if (x === 10) {
let y = 20; // y 只在当前块级作用域内有效
console.log(x + y); // 输出 30
}
// console.log(y); // 这里会报错,因为 y 不在此作用域内
const 常量
概念:
1.只在声明所在的块级作用域内有效
2.const命令声明的常量不提升
3.存在暂时性死区,
4.只能在声明的位置后面使用声明的常量,
5.也与let一样不可重复声明
6.初始化必须要赋值
7.不能修改
代码示例:
// 使用 const 声明常量
const PI = 3.14159;
console.log(PI); // 输出 3.14159
// 不能修改常量的值,下面的代码会报错
// PI = 3.14;
// const 也有暂时性死区的特性
// console.log(MAX); // 这里会报错,因为 MAX 在声明之前被使用了
const MAX = 100;
2.解构赋值
用途:
- 交换变量的值。
- 从函数返回多个值。
- 定义函数的参数。
- 提取JSON数据
- 设置函数参数的默认值
怎么区分构赋值
对象是{};
数组是[];
2.1数组解构赋值
- 基本使用
let [a,b,c]=[1,2,3];
console.log(a);//1
console.log(b);//2
console.log(c);//3
- 解构嵌套数组
let arr = [1,[[2],3]];
let [a,[[b],c]]=arr;
console.log(a+"-"+b+"-"+c);
- 不完全解构
let [a,b] = [1,2,3];
console.log(a);
console.log(b);
let [a, [b], c] = [1, [2, 3], 4];
- 剩余运算符
let [a, ...b] = [1, [2, 3], 4];
console.log(a); //1
console.log(b);//[[2,3],4]
- 解构默认值
let [x,y] = ['a'];
console.log(x);//'a'
console.log(y); // 如果没有的解构 那么就统一都是undefined
let [x, y = 'b'] = ['a'];
console.log(x); // 'a'
console.log(y); //'b'
2.2对象解构赋值
- 基本写法
let {
age,
name, aaa
} = obj;
console.log(name + age + aaa); //解构的取值方式 aaa没有就是undefined
- 解构嵌套数组
let obj = { -- 必须要掌握
p:['hello',{y:'world'}]
};
let {p:[x,{y}] } = obj;
console.log(x+y); //helloworld
- 不完全解构
let obj = {
p:['hello',{y:'world'}]
};
let {p:[x,{y},z] } = obj;
console.log(x+y+z); //hello world undefined
- 剩余运算符
let obj = {a:10,b:20,c:30,d:40};
let {a,b,...rest} = obj
console.log(a) // 10
console.log(b)//20
console.log(rest)//{c:30,d:40}
- 解构默认值
// let obj = {a:3};
// 原本的值优先
let {a=10,b=20} = {a:3};
console.log(a);//3
//如果 原本没有的 那么就去解构 如果解构没有默认值那就undefined
//如果有默认一个值 比如b=20那么就取这个默认值
console.log(b);//20
// a:aa aa表示给a属性重写一个变量名称叫aa 避免和上面的a重复命名
//因为let不允许重复定义同一个变量名
let {a:aa,b:bb=5} = {a:3};
console.log(aa);//3
console.log(bb);//5