Iterator 和 for...of 循环

Iterator(遍历器)的概念JavaScript 原有的表示“集合”的数据结构,主要是数组(Array)和对象(Object),ES6 又添加了Map和Set。这样就有了四种数据集合,用户还可以组合使用它们,定义自己的数据结构,比如数组的成员是Map,Map的成员是对象。这样就需要一种统一的接口机制,来处理所有不同的数据结构。遍历器(Iterator)就是这样一种机制。它是一种接口,为各种不同的数据结构提供统一的访问机制。任何数据结构只要部署 Iterator 接口,就可以完成遍历操作(即依次处理该数据结构的所有成员)。Iterator 的作用有三个:一是为各种数据结构,提供一个统一...

617 0 0

Promise

基本了解Promise 是异步编程的一种解决方案,比传统的解决方案——回调函数和事件——更合理和更强大。它由社区最早提出和实现,ES6 将其写进了语言标准,统一了用法,原生提供了Promise对象。所谓Promise,简单说就是一个容器,里面保存着某个未来才会结束的事件(通常是一个异步操作)的结果。从语法上说,Promise 是一个对象,从它可以获取异步操作的消息。Promise 提供统一的 API,各种异步操作都可以用同样的方法进行处理。Promise对象有以下两个特点。(1)对象的状态不受外界影响。Promise对象代表一个异步操作,有三种状态:pending(进行中)、fulfil...

587 0 0

Reflect

Reflect也是es6新增的api,他的出现主要是解决以下几点问题:将Object对象的一些明显属于语言内部的方法(比如Object.defineProperty),放到Reflect对象上修改Object对象的一些方法的返回结果,比如:Object.defineProperty(obj, name, desc)在无法定义属性时,会抛出一个错误,而Reflect.defineProperty(obj, name, desc)则会返回false。// 老写法 try { Object.defineProperty(target, property, attributes); //...

591 0 0

Proxy 代理

简介proxy用于修改某些操作的默认行为,由于是在语言层做出了修改,所以属于一种“元编程”,也可以理解为代理层,可以对外界的访问进行过滤改写。var proxy = new Proxy(target, handler);new 出Proxy,接收两个参数,一个是需要被代理的对象target,一个是代理的拦截器配置对象。var proxy = new Proxy({}, { get: function(target, propKey) { return 35; } }); proxy.time // 35 proxy.name // 35 proxy.title // 3...

683 0 0

Set和WeakSet、Map和WeakMap数据结构

Set 基本用法es6提供了一种新的数据结构Set,他是一个构造函数,初始化时可以接收一个参数,这个参数可以是数组,或者是带有iterable接口的数据。const s = new Set([1,2,3,4,1,2]); [...s]; //[1,2,3,4]从这里我们看的出来,set有一个非常棒的特性,就是去重,重复的值会被自动忽略。而带iterable接口的数据有数组,dom类数组等等,一般常用的就是数组了。set是如何判断是否相等,用的算法叫Same-value equality;他类似于全等运算符===;但对于NaN的判断略有不同。在全等中两个NaN是不想等的,但是在set中,...

685 0 0

Symbol

es6引入了一个新的数据类型Symbol,用于表示独一无二的值,他是JavaScript第七种数据类型。Symbol值通过Symbol函数生成,但是不需要new,用于解决属性名容易被人复写的问题。目前对象的属性名都是string类型,也就是字符串,现在新增了symbol类型,只要属性名是symbol类型,就是独一无二的,可以保证不会与其他属性名产生冲突。let s = Symbol(); typeof s //"symbol"基本使用Symbol函数接收一个字符串参数,表示对Symbol实例的描述,主要是为了再控制台显示,而且即便两个Symbol使用同一个字符串描...

688 0 0

Object 对象的扩展

属性的简写es6允许对属性进行简写,可以直接使用变量,变量名直接成为了属性名。var a = "hello"; var b = {a}; //等同于 var b = { a:a }属性里的方法也可以简写var a = { b(){...} } //等同于 var a = { b: function(){ ... } }在CommonJS模块输出变量时,也就是node模块导出时,这种简写就显得十分方便,我们直接导致一个对象,对象里面使用简写。var a = {}; var b = {}; module.exports = {a,b}而属性的赋...

787 0 0

Array 数组扩展

扩展运算符console.log(...[1,2,3]); //1,2,3扩展运算符会将后面跟着的数组转换为参数序列,这种效果一般用于函数参数,数组操作里面。扩展运算符后面甚至可以接表达式,但是表达式一定要有数组抛出const arr = [...(x>0?[1]:[]),2];如果是一个空数组使用扩展运算符,则无任何效果const a = []; console.log([...a,1]); //[1]代替数组的apply方法首先要知道apply除了改变this的指向外,第二个参数是一个数组,apply会将这个数组转为序列参数。如:function test(x,y,z){ ...

603 0 0
Array 数组扩展

Function 函数

函数默认参数es5无法设置默认参数,只能通过函数内部先进行判断,如果没有参数则设置一个值。function test(x,y){ x = x || "hello "; y = y || "word"; console.log(x+y); } test(); //hello word这样写的话会有一个问题,就是如果我就要参数为空,就会出现问题test("","test"); // hello test所以我们还需要加一个判断function test(x,y){ x = typeof x...

683 0 0

Number 类型

二进制和八进制表示法es6提供了新的表示方法:数字:503二进制111110111 //es5 0b111110111 //es6八进制767 //es5 0o767 //es6也就是加了个前缀,二进制前缀是:0b,八进制前缀是:0o,后面的字母大写也是可以的,都一样。isFinite()和isNaN()is开头一般都是用于判断的,这两个方法为Number对象新增的两个方法, isFinite用于判断数字是否为有限的数字,isNaN就判断值是否为NaN需要注意的是,这两个方法和以前的方法不同,他们不会先转换值为number类型再进行比对,而是直接判断,不为数字...

839 0 0

关于es6 解构报错的一些经验

es6的解构非常好用,可以省去很多代码。为此我测试了一些场景的错误没有对应的keyconst {data} = {datas:"文本"};这种情况下,有值,但是key无法解析,那么就会返回undefined,也就是data输出是个undefined没有值const {data} =null;这种情况就会报错,这个报错会停止js的运行,所以我们需要用try--catch捕获key对应的值为nullconst {data} ={datas:null};这种情况也不会报错,他会把null拿到综合情况const {data,test} ={datas:null};这种情况并不...

841 0 0

es6 正则

new RegExp 调整原来es5的时候,new一个正则出来,如果第一参数就是正则,那么只会返回这个正则参数出来,并且是不能使用第二个参数的。否则就会报错。es6调整了一下,即便第一个参数是正则,我们也能使用第二个参数给他指定修饰符,这个修饰符会覆盖原来参数自带的修饰符//传统 const a = new RegExp('one','ig'); //输出 /one/ig const b = new RegExp(/one/ig); //输出 /one/ig //es6 const c = new RegExp(/one/ig,'i'); //输出 /one/i 字符串正则...

1231 0 0

es6 字符串的方法

原来如果要遍历一个字符串用的是for循环,通过输出下标的方式遍历每个字符。但是如果字符是大于0xFFFF的unicode字符,那么就无法正确输出了,所以现在推荐使用新的方法遍历。for of遍历用法和for in一样for (let code of "for"){ console.log(code); } //f //o //r查找方法原来的字符只有一个indexOf方法用于查找,现在新增三个方法:startsWith()它是用于判断字符的头部是否存在对应的字符,并返回布尔值,有两个参数,第一个是要查找的字符,第二个是起步的位置它这个可以理解为正则的开头匹配吧!...

1083 0 0

es6 解构笔记

es6的解构,解构的是一个对象才行,如果不是对象,则先把右边的内容转成对象再进行解构。数组和对象的解构比较简单,这里就不多说了,主要讲讲另外几个对象类型的解构:string类型的解构解构一段文本内容,文本内容会被转换成类似数组的对象。let [a,b,c] = "one"; console.log(a); // o console.log(b); // n console.log(c); // e数值和布尔类型的转换这两个和字符不同,他们的转换后不是数组,而是一个继承了Number或者Boolean的所有方法的对象,可以尝试理解为是一个继承了他们类型的所有方法...

741 0 0

Object.freeze() 冻结对象

const是禁止修改指向,而不是不能改值,由于常量的修改是直接赋值,所以使用const声明的变量是无法修改的。但是object却是可以修改的,我们可以对这个object对象写入数据,那如果我们要禁止这个对象被读写呢?我们可以利用Object.freeze()方法来实现。const obj = { one : 1 }一般我们可以通过obj.one = xx来修改值,现在我们要防止这个值被修改:const obj = Object.freeze({ one : 1 }) obj.one = 5; console.log(obj) //{one:1}无法被修改。但是还有一种情况,...

853 2 0
加载中