var let const
- var变量的提升,let没有变量提升
- let不允许重复声明
- let存在块级作用域,var没有块级作用域
- let存在暂时性死区
const除了let所有特性外,不允许修改,const常量的声明与赋值必须同时进行
// 1.
// console.log(a);// undefined
// var a =1;//var 没有块级作用域
// console.log(a);
// let a=1;//报错
// var a;
// console.log(a);// undefined
// a=1;
// 2.
// var a=1;
// var a=2;
// console.log(a);//2
// let a=1;
// let a=2;
// console.log(a);//报错
// 3.
// var a=1;
// {
// var a=1;
// }
// console.log(a);// 1
// {
// let a=1;
// }
// console.log(a);//a is not defined a没有声明
// for(var i=1;i<10;i++){ 不使用var
// }
// for (let i =0; i < 10; i++)
// }
// 4.
// let a=1;
// {
// console.log(a);
// let a=0;
// }
变量的解构赋值
- 对象的解构赋值 解构时需要提供对象的属性名,会根据属性名找到对应的值。没有找到的返回缺省值,没有缺省值则返回 undefined。
let { foo, bar } = { foo: 'aaa', bar: 'bbb' };
foo // "aaa"
bar // "bbb"
- 字符串的解构赋值
const [a, b, c, d, e] = 'hello';
a // "h"
b // "e"
c // "l"
d // "l"
e // "o"
- 数组解构
解构的时候,变量从左到右和元素对齐,可变参数放到最右边。
能对应到数据就返回数据,对应不到数据的返回默认值,如果没有默认值返回undefined。
const s=new Set(arr);
const[...newArr]=s;
console.log(newArr);
//map k-v
const map=new Map();
map.set("name","张三");
map.set("sex","男");
map.set("age",21);
console.log(map);
for (const item of map) {
const [k,v]=item
console.log(k,v);//数组解构
}