摘要: ProxyProxy概述Proxy 用于修改某些操作的默认行为,等同于在语言层面做出修改,所以属于一种“元编程”(meta programming),即对编程语言进行编程。Proxy 可以理解成,在目标对象之前架设一层“拦截”,外界对该对象的访问,都必须先通过这层拦截,因此提供了一种机制,可以对外界的访问进行过滤和改写。Proxy 这个词的原意是代理,用在这里表示由它来“代理”某些操作,可以译为“... 阅读全文
posted @ 2018-01-16 14:02 Chen,ChunChang 阅读(278) 评论(0) 推荐(0) 编辑
摘要: ReflectReflect概述Reflect对象与Proxy对象一样,也是 ES6 为了操作对象而提供的新 API。Reflect对象的设计目的有这样几个。(1) 将Object对象的一些明显属于语言内部的方法(比如Object.defineProperty),放到Reflect对象上。现阶段,某些方法同时在Object和Reflect对象上部署,未来的新方法将只部署在Reflect对象上。也就... 阅读全文
posted @ 2018-01-16 14:02 Chen,ChunChang 阅读(215) 评论(0) 推荐(0) 编辑
摘要: Set 和 Map 数据结构Set 和 Map 数据结构Set基本用法ES6 提供了新的数据结构 Set。它类似于数组,但是成员的值都是唯一的,没有重复的值。Set 本身是一个构造函数,用来生成 Set 数据结构。const s = new Set(); [2, 3, 5, 4, 5, 2, 2].forEach(x => s.add(x)); for (let i of s) { con... 阅读全文
posted @ 2018-01-16 14:01 Chen,ChunChang 阅读(243) 评论(0) 推荐(0) 编辑
摘要: SymbolSymbol概述ES5 的对象属性名都是字符串,这容易造成属性名的冲突。比如,你使用了一个他人提供的对象,但又想为这个对象添加新的方法(mixin 模式),新方法的名字就有可能与现有方法产生冲突。如果有一种机制,保证每个属性的名字都是独一无二的就好了,这样就从根本上防止属性名的冲突。这就是 ES6 引入Symbol的原因。ES6 引入了一种新的原始数据类型Symbol,表示独一无二的值... 阅读全文
posted @ 2018-01-16 14:00 Chen,ChunChang 阅读(188) 评论(0) 推荐(0) 编辑
摘要: 数组的扩展数组的扩展扩展运算符含义扩展运算符(spread)是三个点(...)。它好比 rest 参数的逆运算,将一个数组转为用逗号分隔的参数序列。console.log(...[1, 2, 3]) // 1 2 3 console.log(1, ...[2, 3, 4], 5) // 1 2 3 4 5 [...document.querySelectorAll('div')] // [, ... 阅读全文
posted @ 2018-01-16 13:58 Chen,ChunChang 阅读(246) 评论(0) 推荐(0) 编辑
摘要: 对象的扩展对象的扩展属性的简洁表示法ES6 允许直接写入变量和函数,作为对象的属性和方法。这样的书写更加简洁。const foo = 'bar'; const baz = {foo}; baz // {foo: "bar"} // 等同于 const baz = {foo: foo}; 上面代码表明,ES6 允许在对象之中,直接写变量。这时,属性名为变量名, 属性值为变量的值。下面是另一个例子。... 阅读全文
posted @ 2018-01-16 13:58 Chen,ChunChang 阅读(183) 评论(0) 推荐(0) 编辑
摘要: 函数的扩展函数的扩展函数参数的默认值基本用法ES6 之前,不能直接为函数的参数指定默认值,只能采用变通的方法。function log(x, y) { y = y || 'World'; console.log(x, y); } log('Hello') // Hello World log('Hello', 'China') // Hello China log('Hello', ''... 阅读全文
posted @ 2018-01-16 13:57 Chen,ChunChang 阅读(200) 评论(0) 推荐(0) 编辑
摘要: 数值的扩展数值的扩展二进制和八进制表示法ES6 提供了二进制和八进制数值的新的写法,分别用前缀0b(或0B)和0o(或0O)表示。0b111110111 === 503 // true 0o767 === 503 // true 从 ES5 开始,在严格模式之中,八进制就不再允许使用前缀0表示,ES6 进一步明确,要使用前缀0o表示。// 非严格模式 (function(){ console.... 阅读全文
posted @ 2018-01-16 13:56 Chen,ChunChang 阅读(270) 评论(0) 推荐(0) 编辑
摘要: 正则的扩展正则的扩展RegExp 构造函数在 ES5 中,RegExp构造函数的参数有两种情况。第一种情况是,参数是字符串,这时第二个参数表示正则表达式的修饰符(flag)。var regex = new RegExp('xyz', 'i'); // 等价于 var regex = /xyz/i; 第二种情况是,参数是一个正则表示式,这时会返回一个原有正则表达式的拷贝。var regex = ne... 阅读全文
posted @ 2018-01-16 13:55 Chen,ChunChang 阅读(349) 评论(0) 推荐(0) 编辑
摘要: 字符串的扩展字符串的扩展ES6 加强了对 Unicode 的支持,并且扩展了字符串对象。字符的 Unicode 表示法JavaScript 允许采用\uxxxx形式表示一个字符,其中xxxx表示字符的 Unicode 码点。"\u0061" // "a" 但是,这种表示法只限于码点在\u0000~\uFFFF之间的字符。超出这个范围的字符,必须用两个双字节的形式表示。"\uD842\uDFB7" ... 阅读全文
posted @ 2018-01-16 13:54 Chen,ChunChang 阅读(319) 评论(0) 推荐(0) 编辑