let
1、let 声明的变量 没有变量提升
console.log(a);
let a = "sun";//a is not defined
2、块级作用域
for(let i = 0;i<5;i++){
}
console.log(i);//i is not defined
var arr=[];
for(let i = 0;i<5;i++){
arr[i] = function(){
console.log(i);
}
}
arr3;//3
3、变量不能重复声明
let c = 10;
let c = 20;
console.log(c);//报错
4、暂时性死区
使用let声明的变量不受外部同名的影响
constant 常量
一旦声明,需要立即赋值
一旦声明,不可更改
其他与let一致
var PI = 3.14;// 常用大写单词表示这是一个常量
PI = "三点一四"
const PI2 = 3.14;
const p = 3.14;
const p2;//报错
PI2 = 3.14;//报错
arrow 箭头函数
var fun = function (){
return 10;
}
fun();
let foo = () => 50;
console.log(foo());//50
//省略了return 关键字和花括号
let bar = (a,b) => a*b;
console.log(bar(10,20));
let a = (a,b)=>{
return a+b;
}
console.log(a(33,44));
function b(callback){
callback();
}
b(function(){
console.log(1111);
});
b(()=>{console.log(222)})
箭头函数能保留当前的作用域
使用箭头函数声明的函数,其作用域为声明时所在的位置(作用域)
箭头函数不能使用new,箭头函数里面不能使用arguments
let name = "ab";
let obj = {
name : "zhar",
say : function(){
console.log(this.name);
// var _this = this;
setTimeout(()=>console.log(this.name),0)
// setTimeout(function(){
// console.log(_this.name);//this作用域被更改
// },0)
}
}
obj.say()//zhar
template 模板字符串
let name = "sun"
var str = `
<div>
asd
<p>${name}</p>
</div>
`;
console.log(str);
object
let obj5 = {name:"sun",age:300}
// let {name,age} = obj5;
// let{nn,age} = obj5;
let {age} = obj5;//let age = obj5.age
console.log(age);
set&map
//array&object
Set与Array类似,无重复元素 无length 属性
构建方法:
1、let s = new Set([1,2,2,2,1]);
2、let s = new Set();
s.add(1)
无length属性,有size属性
add() 向集合添加元素
delete() 删除指定元素
has() 判断集合是否包含指定元素
size() 得到集合长度
clear() 清空集合
let s2 = new Set();
s2.add(1)
s2.add(1)
s2.add(2)
s2.add(2)
s.add(1);
console.log(s2,s2.size);//1,2;2
console.log(s2.has(1),s2.has(3))//true,false
s2.delete(1);
console.log(s2);//2
console.log(s.keys());
console.log(s.values())
console.log(s.entries())
let m = new Map();
m.set("name","sun")
console.log(m);
console.log(m.get("name"))
// map 可以使用任意类型做键,哪怕是函数和对象
let a = 10;
m.set(a,"abc")
console.log(m)//Map{'name'=>'sun',10=>'abc'}
//$("div").length
//$("div").size()
other
function fun(){
console.log(arguments);//{ '0': 'a', '1': 'b', '2': 'c' }
// Array.prototype.slice.call(arguments)
//类数组转数组(NodeList节点集合/String)
let a = Array.from(arguments);
a.push("f")
console.log(a);
}
fun("a","b","c");//[ 'a', 'b', 'c', 'f' ]
let b = Array.from("hello")
console.log(b)//[ 'h', 'e', 'l', 'l', 'o' ]
promise 承诺(重要)
代表未来才会知道结果的事情,通常为异步操作setTimeout、ajax,不可预估返回结果的时间
default默认参数
function fun(a){
a = a||0;
return a/5
}
console.log(fun(3));//0.6
console.log(fun())//0
//参数默认值
function bar(a=0){
return a/5;
}
console.log(bar());//0
console.log(bar(10));//2
class
reset 运算符
...代表剩余参数
function fun(...a){
// arguments
console.log(a)
}
fun(2,3,4,5,6,7,8);//[ 2, 3, 4, 5, 6, 7, 8 ]
function fun(d,e,...a){
console.log(d,e,a)
}
fun(2,3,4,5,6,7,8);//2 3 [ 4, 5, 6, 7, 8 ]
...叫做扩展运算符