es6标准入门 学习简记(一)

第一章:es6简介
1.1ecmascript与JavaScript的关系:前者是后者的规格,后者是前者的实现。
~1.6:es6到es5得一些转码方法

第二章:let 和 const
2.1:let命令
用于声明变量,用法类似于var,但是 只在所在的代码块有效let声明不存在变量提升let命令的暂时性死区(区块中若有let命令,则这个区块对这些命令声明的变量从一开始就形成封闭作用域,若在声明之前使用就报错, 即使是全局变量)P11, 相同作用域下不允许重复声明就算是用var
2.2:块级作用域
1.为什么需要块级作用域:
场景一:内层变量覆盖外层变量的场景
场景二:循环变量泄露为全局变量
2.es6允许块级作用域任意嵌套
3.es6中规定函数的作用域在其所在的块级作用域之内,即es5的函数提升将会失效。
4. 严格模式下,函数只能在顶层作用域和函数内声明,其他情况下的声明会报错。
2.3:const
定义常量,不可修改,声明同时必须初始化,其作用域类似let,需要注意的是将对象声明为常量,指向的地址不可变,但地址上的数据可变。
冻结对象:Object.freeze();
2.4:跨模块常量
export,import
2.5:全局对象属性
在es6之前,全局变量和全局对象的属性是一件事,容易不知不觉创建了全局变量, 因此es6中,规定let,class,const命令省声明的全局变量不是全局对象的属性

第三章:变量的解构赋值
3.1:数组的解构赋值
1.如:let [a,b,c] = [1,2,3];abc分别赋值为123
2.let [head,...tail]=[1,2,3,4];head为1,tail为数组[2,3,4]即 ...表示数组
3.解构不成功变量值为undefined
4.只要某种数据解构具有Iterator接口,都可以采用数组的形式解构赋值
5.允许指定默认值 var [foo=true] = [];或者表达式var [foo=func()]
6.使用严格等于判断===
3.2:对象的解构赋值
1.如:var {foo,bar} = {foo:"aa",bar:"bb"};
2.其中属性名和实际变量名的关系P21-22
3.对于已声明变量的解构赋值:加上括号避免报错({x}={x:1});
3.3:字符串的解构赋值
如const [a,b,c,d,e] = "hello";
3.4:数值和布尔值的解构赋值
1.如果等号右边是布尔值或者数值时,则会现将其转换为对象
2.总的规则:只要等号右边不是对象,就先将其转为对象,由于undefined与null无法转为对象,所以会报错:let {prop:x}=undefined;
3.5:函数参数的解构赋值
3.6:圆括号问题
不能使用圆括号的情况:P25
3.7:解构赋值的用途
1.交换变量的值
2.从函数返回多个值
3.函数参数的定义
4.提取json数据
5.函数参数的默认值
6.遍历Map结构
7.输入模块的指定方法

第四章:字符串的扩展
4.1:字符的unicode表示法
4.2:codePointAt();
4.3:String.fromCodePoint();
4.4:字符串的遍历接口
4.5:es7提供的at();
4.6:normalize();
4.7:includes(),startWith(),endsWith(),返回值均为布尔值,均支持第二个参数,表示开始搜索的位置
4.8:repeat();参数为重复次数
4.9:ES7的padStart(),padEnd(),字符串补全长度
4.10:模板字符串的引入:嵌入变量或表达式的语法${variable},字符串用 ` 包起来,模板字符串中的缩进空格会被保留
4.11:模板编译
4.12:标签模板:模板字符串无论第一部分是变量还是普通字符,函数第一个参数的数组的第一个元素都会来自这里,变量就用空字符,如:(

4.13:String.raw();

第五章:正则的扩展
5.1:regexp构造函数
第一个参数可以是字符串或正则表达式,打入过有第二个参数,那么前面如果是正则表达式,那么修饰符被忽略采用第二个参数所指。
5.2:字符串的正则方法
5.3:u修饰符,可处理4个字节的utf-16编码
5.4:新加的修饰符:y(粘连)
5.5:正则对象的新增:sticky属性。这里复习下:正则对象原有的几个属性:global, ignoreCase,multiline,source,lastIndex
5.6:又一新增属性:flags

第六章:数值的扩展
6.1:二进制和八进制数值表示法:0b 0o
6.2:Number.isNaN() 和 Number.isFinite(),注意和原来的全局方法isNaN(),isFinite()的区别
6.3:Number.parseInt() Number.parseFloat() 和全局方法parseInt,parseFloat一样,是为了使语言模块化,减少全局方法。
6.4:Number.isInteger(),判断是否是整数,因为js中,整数和浮点数储存方法一样,所以Number.isInteger(2)和Number.isInteger(2.0)返回的都是TRUE
6.5:Number.EPSILON,新设置的一个极小的常量。主要用于浮点数计算的精度判断
6.6:安全整数Number.MAX_SAFE_INTEGER Number.MIN_SAFE_INTEGER(最大最小数)和Number.isSaferInteger
6.7:Math对象的拓展
Math.trunc()返回整数部分
Math.sign()判断是正是负还是0
还有对数,三角函数操作的方法
6.8:新增的指数运算符:**
如:2**3=8;

第七章:数组的扩展
7.1: Array.from() P60
能将两类对象转换为真正的数组:类数组对象和可遍历对象。应用场景:Dom操作返回的Nodelist,函数内部的arguments对象
7.2:Array.of() 类似于Array(),区别在于Array(3)=[,,,],而Array.of(3)=[3];
7.3:copyWithin,将当前数组的指定部分覆盖到当前数组的某位置。P62
7.4:find()和findIndex()
findIndex可以借助Object.is()识别数组中的NaN:[NaN].findIndex(y=>Object.is(NaN,y));//0
Object.is()是es6 的
7.5:数组实例的fill(),常用于对空数组的初始化
7.6:数组实例的entries(),keys(),values(),分别是遍历键值对,键,值
复习:获取对象的键,数组的键可以用for...in for(let i in obj) 那么i就是对应的键值
7.7:includes();同样能识别NaN P65
7.8:数组的空位处理
7.9:数组推导

第八章:函数的扩展
8.1:函数参数的默认值,就像PHP语法那样 P71的两种写法比较
函数的length属性,返回除去指定了参数默认值的参数个数
作用域 P73
应用,参数为空抛错
8.2:rest参数:形如”...变量名“ P75
8.3:扩展运算符:"...",可看做rest的逆,将数组展开
8.4:.name;返回函数名
8.5: 箭头函数
例:var f = v => v; 等价于: var f = function (v){return v;};
如果函数不需要参数或要多个参数:var f = () => 5; var f = (num1,num2) => num1+num2;
当函数语句多的时候使用大括号括起来,并用return返回: var f = (num1,num2) => {return num1+num2;}
也可以返回对象,要加个外括号:(num1,num2) => ({first:num1,second:num2});
箭头函数中的this对象就是定义时所在的对象,这个指向是固定的。箭头函数实际上没有自己的this对象,内部的this实际上就是外部的this,所以自然也不能用apply,call,bind这些方法去改变this的指向。
8.6:函数绑定
es7的一个提案,不过babel转码器已经支持了,语法结构:“对象::函数名”,返回对象
将左边对象作为上下文环境(即this对象)绑定到右边的函数上
8.7:尾调用优化,只有严格模式下,尾调用才开启。
递归函数的改写

第九章:对象的扩展
9.1:属性的简洁表示法 var foo = 'bar'; var baz = {foo}; 等价于 var baz = { foo:foo};还有对象方法的简写
9.2:属性名表达式: obj['a'+'bc'] = 70; 等价于 obj.abc = 70;
9.3:方法的name属性:.name返回方法或函数的函数名
9.4:Object.is()比较两个值是否严格相等,除了:-0===+0//false,NaN===NaN//false,而Object.is()为true之外与===相同
9.5:Object.assign() 将源对象上所有可枚举且是自身非继承的属性复制到目标对象上,参数1是目标对象,参数2+是源对,返回克隆的对象
完全克隆:function clone(origin){
let originProto = Object.getPrototypeOf(origin);
return Object.assign(Object.create(originProto),origin);
}
9.6:属性的可枚举性
Object.getOwnPropertyDescriptor(obj,'foo');
for...in:遍历对象自身的和继承的可枚举属性
Object.keys():返回对象自身的所有可枚举属性,比上面少了继承
9.7: 属性的遍历P98

第十章:Symbol
10.1:概述 定义独一无二的变量,es6新增的js基本类型
定义方法: var a = Symbol();//因为是基本类型,所以不能new
可以带参数,但是只是用于String过程的描述:var a = Symbol("a"); a;//Symbol(a)
Symbol数据可以转布尔型Boolean(sym);可以转字符串String(sym)或sym.toString();
Symbol数据不可用于运算
10.2:作为属性名的symbol 需要包裹在中括号中,而不能使用点调用:
三种写法:a[sym]=66; a{[sym]:66}; Object.defineProperty(a,sym,{value:66});
var aa = Symbol(); var a = {}; a.aa = 'Hello'; a[aa];//undefined a['aa'];//Hello a.aa;//Hello
Symbol值作为属性名时,该属性是公开属性。
10.3:消除魔术字符串
10.4:属性名的遍历
只有Object.getOwnPropertySymbols方法可返回指定对象的所有Symbol属性名,返回数组
而Reflect.ownKeys(obj)方法可以返回对象所有类型的键名,包括常规的和symbol
10.5:Symbo.for(),Symbol.keyFor()
前者可用于重复使用同一个Symbol值,因为Symbol()写法没有登记机制,所以每次调用都会返回一个不同的值。。。而Symbol.keyFor用于返回一个已登记Symbol的key值。
10.6:11个内置的Symbol值

第十一章:Proxy和Reflect 后面再回来看
第十二章:二进制数组

第十三章:set和map数据结构
13.1 set
es6提供的新的数据结构,类似于数组,但是成员的值都是唯一的,不重复
基本语法: var s = new Set();//可以接受一个数组初始化初值
获取长度:s.size;
操作方法:添加成员:s.add(x);//返回Set本身
删除成员:s.delete:(x);
是否存在某个值,有则返回,否则返回false:s.has(x)
清除所有成员:s.clear();//无返回值
Array.from将Set结构转为数组结构:Array.from(s);
遍历方法:keys(),values(),entries(),forEach()
由于扩展运算符...内部使用for...of结构,所以也可用于Set结构,如var arr = [...s];
13.2:weakset
WeakSet类似于Set结构,也是非重复值的集合,只是WeakSet的成员得是对象
13.3:Map ”键值对“
Map结构可使对象的属性键值为除了字符串外的多种值
只有对同一对象的引用,Map结构才将其视为同一个键。可解决同名属性碰撞的问题
如:map.set(['a'],66);map.get(['a']);//undefined
但是map.set(1,11);map.get(1);//11就可以,因为值类型和引用类型的获取方式是不一样的
属性与方法:
size:返回Map成员总数
get(key),has(key),delete(key),clear()
遍历方法同set方法。
Map与数组(使用扩展运算符...最便捷),对象,json的相互转换(转json前需先转对象)。
13.4:WeakMap
WeakMap与map相似,唯一的区别是WeakMap只接受对象作为键名,并且键名指向的对象不计入垃圾回收机制中。
专用场合:键名所指向的对象,在将来可能会消失,因为所指向的对象清除后,WeakMap记录也会被自动清除,这种结构有助于防止内存泄露。还有就是部署私有属性。
WeakMap没有遍历操作,没有size属性,不能清空,没有clear()
WeakMap的方法:set(),get(),has(),delete()。
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值