有关let,const,var三种声明变量方式的不同和相同之处
-
var声明的变量会挂载到window上,而let和const声明的变量不会
-
var 存在变量提升,而let和const不存在变量提升,let和const上面的区域称为“暂时性死区”,在定义之前不可以使用
-
let和const的声明会形成块级作用域
-
在同一个作用域下,let和const不能再次声明同一个变量,而var可以
-
let定义变量之后可以修改,而const表面上像是声明一个“常量”。const并不是保证变量的值不得改动,而是指变量指向的内存地址不得改变。对于简单数据类型(Number、String、Boolean),值就保存在变量指向的内存地址,因此等同于常量;而对于复合数据类型(主要是对象和数组),变量只是保存了指向堆内存的地址,至于堆内的数据是不是可变的,就不能控制了。
解构赋值和扩展运算符
-
解构赋值 左右两边结构必须一样 右边必须有值 声明和赋值不能分开
let [a,b,c] = [1,2,3];
let {name,sex,age} = {name:'zhangsan',sex:'女',age:'19'};
let [one,two,three,four] = [{a,b,c},[1,23],'8','zhangsan'];
let [{x,y,z},[c,d],two,name] = [{a,b,c},[1,23],'8','zhangsan'];
-
扩展运算符
...三点运算符 展开数组 默认参数
let arr1= [1,2,3] let arr2 = [4,5,6]
let arr = [...arr1,7,8,9,...arr2,'zhangsan','lisi'];
function show(a,b,c) { console.log(a); console.log(b); console.log(c); } let arr = [1,2,3]
show(...arr);
function demo(a,b,...args){ console.log(args); }
demo(1,2,3,4,5,6);
新增模板字符串
startsWith 判断以什么字符串开头
endsWith 判断以什么字符串结尾
-
模板字符串
模板字符串(template string)是增强版的字符串,用反引号(`)标识。它可以当作普通字符串使用,也可以用来定义多行字符串,或者在字符串中嵌入变量。let title = '黄天不负有心人'; let slogen = '成就自己的只需要一套精品';
let jsx =
<h1>${title}</h1><b>学习努力</b><div><i>${slogen}</i></div>
Proxy
Proxy可以监听对象身上发生了什么事情,并在这些事情发生后执行一些相应的操作。一下子让我们对一个对象有了很强的追踪能力,同时在数据绑定方面也很有用处。
箭头函数和this的指向问题
-
ES6 允许使用“箭头”(=>)定义 不需要参数或需要多个参数,就用圆括号代 代码块部分多于一条语句,就用大括号括起来,并且用return返回 箭头函数返回对象时,必须在对象外面加上括号 箭头函数使得表达更加简洁 箭头函数能够简化回调函数
-
关于箭头函数中的this的指向普通函数的this:指向它的调用者,如果没有调用者则默认指向window. 箭头函数的this: 指向箭头函数定义时所处的对象,而不是箭头函数使用时所在的对象,默认使用父级的this.
综上:箭头函数没有自己的this,它的this是继承而来,默认指向在定义它时所处的对象(宿主对象)。
-
function换成=>放在参数和函数体中间1、如果没有参数,或有多个参数时,就需要使用()来定义参数列表; 2、如果只有一个参数,可以不用(); 3、如果函数体中只有一条语句,可以不用{},语法中会自动加入return 4、箭头函数在返回对象时,必须在对象外面加上()才可以
const fun= (x) =>{ console.log(x); return x*x }; console.log(fun(100));
-
箭头函数与普通函数对象实例 1、定义一个div,设置他的样式 2、获取他的id,然后给他一个点击事件 3、 const box= document.getElementById('box'); box.onclick=function (){ //重新定义this,此时的对象才是box对象,因为里层调用一个函数,会 默认为Windows对象 const obj=this; setTimeout(function (){ obj.className= 'color'; console.log(obj); },1000)} 4、箭头函数没有自己的this,它的this是继承而来,默认指向在定义它时所处的对象(宿主对象)。 box.onclick=function (){ setTimeout(() =>{ console.log(this); this.className= 'color'; // console.log(obj); },1000) }
数组中新加的高级函数
-
过滤函数filter
-
映射函数map
-
汇总函数reduce
-
出一个实例 有一个商品列表 1、将大于10元以上的商品打折,取出大于10元以上的商品; 2、将10元以上的商品打5折; 3、打完折的商品总价是多少;
1、定义一个数组let goods = [12,30,34,60,20,25]
2、使用过滤函数filter取出大于10的数
let goods1 = goods.filter(function (n){
return n>=10;
})
3、使用映射函数map直接返回一般的数字
console.log(goods1);
let goods2 = goods1.map(function (n){
return n*0.5;
})
4、使用汇总函数reduce求和
let sum = goods2.reduce(function (s,n){
return s+n;
},0)
//第一次,s 参数是0,n是数组中的第一个元素6
//第二次,s 参数是第一次回调函数的返回值,n是数组中的第二个元素15
//第三次,s 参数是第二次回调函数的返回值,n是数组中的第三个元素17
//第四次,s 参数是第三次回调函数的返回值,n是数组中的第三个元素30
简单的方法,使用链式编程,直接实现题目
let goods = [12,30,34,60,20,25]
let sum =goods.filter( n => n=>10).map( n=> n*0.5).reduce((s,n)=>s+n);
es6新增的数据结构map和set
-
2.Map函数的作用
json的键(key)只能是字符串,map的key可以是任意类型。
map.set(key,value) 设置一个值
map.get(key) 获取一个值
map.delete(key) 删除一项
map.has(key) 判断有没有key
map.clear( ) 清空 -
极速更新中.............