一 var、let和const区别
1.let和const不存在变量提升
console.log(c); //undefined
var c=‘hello‘;
console.log(d); //报错
let d=‘world‘;
2.let 和const 在同一个作用域下不能重复定义同一个名称
var d=1;
var d=100;
console.log(d); //100
let f=1;
let f=100; //若直接去掉let这个类型定义 ,直接f=100;是可以的,这个变量值可以改变
console.log(f); //报错
3.有着严格的作用域 var函数作用域 let和const块级作用域
function fun(){
var n=10;
if(true){
var n=100;
}
console.log(n);
}
fun(); //100
function fun(){
let m=10;
if(true){
let m=100;
}
console.log(m); //此时的两个m作用域范围不一致,不报错
}
fun(); //10
注明:const 声明一个只读的常量,一旦声明,常量的值就不能改变
const w=100;
w=200; //报错
const r; //报错, 一定初始化,不能只声明不赋值
const obj ={};
obj.name = ‘anna‘;
console.log(obj)//不报错,因为数组和对象是引用对象,它定义的是内存的地址
const arr=[];
arr.push(1) //不报错,因为数组和对象是引用对象,它定义的是内存的地址
二、箭头函数 (简化了函数的定义)
let f = v=>v; //变量名 = 参数 => 返回值(函数体) 参数为空或个数为两个及两个以上则应()括住参数
var f=function(v){
return v;
}
let f2 = (n1,n2) => n1+n2;
三、数据结构 Set Map
set 类似于数组 成员是唯一的
map 类似于对象
const s=new Set();
s.add(1).add(2).add(3).add(2);
console.log(s) //Set(3) {1,2,3}
//面试常见题 数组去重处理
var arr2 = [2,2,3,1,4,4,2,2,6];
var arr3 = [...new Set(arr2)]; //把数组转成set类型,自动去重,之后再加[...]扩展运算符又转成数组类型
const m = new Map();
m.set(‘name‘,‘anna‘).set(‘age‘,18);
for(let [key,value] of m){
//可以用for循环取值
}
原文:https://www.cnblogs.com/cccaroline/p/13372170.html