let和const
let:是定义变量的关键字,功能和var差不多,只在自己的块级作用域内起作用。
块级作用域:每个{}为一个作用域,可防止全局变量的污染。
const:是定义常量的关键字,当定义的变量是不允许被修改的时候,用const来定义。
注意:
1 常量不允许被修改,如果是一个对象,那么对象的引用不能被修改,修改就会报错。
2 定义常量的时候必须要赋值。
3 不要重复定义。
4 const也是在块级作用域中生效。
解构赋值
本质上就是赋值。把一种结构解散重构,然后赋值,是一种模式的匹配,关键是一一对应的关系。
let [a,b] = [1,2]; //相当于let a = 1; let b = 2;
作用:方便赋值。
数组的解构赋值:
1 结构不成功时,值为undefined。
let [x,y] = [10];
console.log(x,y); //10 undefined
2 可以设置默认值。
let [a,b=20] = [10];
3 可以使用…(扩展运算符),当值比变量多的时候。
let [a,b,...c] = [1,2,3,4,5];
console.log(a,b,c); //1 2 Array(3)
对象的解构赋值:
赋值符号两边是对象,叫做对象的解构赋值。
let {a,b} = {a:"hello",b:20};
console.log(a,b); //hello 20
注意:1 对象的解构赋值一一对应关系是根据key:value中的key值。
2 若左边的对象key和value同名,可简写{a:a,b:b} --> {a,b}。
3 对象的解构赋值对应关系根据key值(不在意顺序),数组的对应关系根据下标(注意顺序)。
4 也可以设置默认值。
let {a,b=20} = {a:10};
5 对象和数组的解构赋值可以嵌套。
//数组嵌套
let [a,[b,c],d] = [1,[2,3],4];
//对象嵌套
let [a,[b,c],d] = [1,[2,3],4];
let obj = {
k: [
'hello',
{y: 'world'}
]
};
let {k,k:[x,{y}]} = obj;
console.log(x,y) //hello world
解构赋值的应用
1 快速交换两个变量的值
2 函数的多个返回值
function fn(){
return [1,2,3];
}
let [x,y,z] = fn();
console.log(x,y,z);
3 函数传参
function fn2([a,b,c]) {
console.log(a,b,c);
}
fn2([1,2,3]);
function fn3({a,b,c}) {
console.log(a,b,c);
}
fn3({a:8,c:5,b:2});
4 关于json数据的提取(常用)
let jsonData = {
name:'zangsan',
age:18,
id:123
};
let {name,age,id} = jsonData;