ECS6

<!-- 

  1, 参考:http://es6.ruanyifeng.com/#docs/intro 

  

   ES6:  JS语言下一代的标准,发布于2015年6月。

        目标:使JS可以编写复杂的大型应用程序,成为企业级开发语言

  2,let & const

let: 代码块有效,不存在变量提升。

    暂时性死区:ES6明确规定,如果区块中存在let和const命令,这个区块对这些命令声明的变量,从一开始就形成了封闭作用域。凡是在声明之前就使用这些变量,就会报错。

let不允许在相同作用域内,重复声明同一个变量。

const: 声明一个只读的常量。一旦声明,常量的值就不能改变。块级作用域内有效。

  const实际上保证的,并不是变量的值不得改动,而是变量指向的那个内存地址不得改动。

  如果真的想将对象冻结,应该使用Object.freeze方法。e.g. const foo = Object.freeze({});

global对象:ES5的顶层对象。(浏览器里面,顶层对象是window,但 Node 和 Web Worker 没有window)   

3,变量解析赋值

变量的解析赋值: let [a, b, c] = [1, 2, 3]; let [x = 1] = [null];//默认值设置。

对象的解析赋值:let { foo: baz } = { foo: "aaa", bar: "bbb" };//foo是匹配模式,baz是变量

用途:1>,交换值[x, y] = [y, x];2>,从函数返回多个值;3>,函数参数的定义.4>,提取JSON数据

 5>,函数参数的默认值;6>,遍历Map结构;7>,输入模块的指定方法

4, 字符串扩展

字符的 Unicode 表示法:'\z' === 'z'  // true; '\172' === 'z' // true; '\x7A' === 'z' // true; '\u007A' === 'z' // true; '\u{7A}' === 'z' // true

codePointAt(): 能够正确处理多个字节储存的字符,返回一个字符的码点。

String.fromCodePoint(): 可以识别0xFFFF的字符,弥补了String.fromCharCode方法的不足。在作用上,正好与codePointAt方法相反。

at():可以识别Unicode编号大于0xFFFF的字符,返回正确的字符。

normalize(): 用来将字符的不同表示方法统一为同样的形式,这称为Unicode正规化。

includes()/startsWith()/endsWith():略

repeat(): 返回一个新字符串,表示将原字符串重复n次. 'hello'.repeat(2) // "hellohello"

padStart()用于头部补全,padEnd()用于尾部补全。 'x'.padStart(5, 'ab') // 'ababx'; 'x'.padEnd(4, 'ab') // 'xaba'

模板字符串:略. 如果使用模板字符串表示多行字符串,所有的空格和缩进都会被保留在输出之中。

String.raw(): 往往用来充当模板字符串的处理函数,返回一个斜杠都被转义(即斜杠前面再加一个斜杠)的字符串,对应于替换变量后的模板字符串

5, 正则的扩展

  new RegExp(/xyz/i); new RegExp(/xyz/, 'i');

 字符串对象共有4个方法,可以使用正则表达式:match()、replace()、search()和split()。

 u修饰符: Unicode模式”,用来正确处理大于\uFFFF的Unicode字符

 点(.)字符在正则表达式中,含义是除了换行符以外的任意单个字符。

 y修饰符,叫做“粘连”(sticky)修饰符。

 ES6为正则表达式新增了flags属性,会返回正则表达式的修饰符。

6, 数值的扩展

 二进制和八进制数值的新的写法: 分别用前缀0b(或0B)和0o(或0O)表示。

 // 严格模式

(function(){

 'use strict';

 console.log(0o11 === 011);

})() 

Number.isFinite():是否有限,  Number.isNaN(), Number.parseInt(), Number.parseFloat(),Number.isInteger()

Number.EPSILON: 在于为浮点数计算,设置一个误差范围,可以接受的误差范围。. Number.EPSILON.toFixed(20)

Number.isSafeInteger(): 整数范围在-2^53到2^53之间(不含两个端点),超过这个范围,无法精确表示这个值。

Math.trunc方法用于去除一个数的小数部分,返回整数部分。

7, 数组的扩展

  Array.from: 用于将两类对象转为真正的数组

  Array.of: 用于将一组值,转换为数组

  copyWithin方法,在当前数组内部,将指定位置的成员复制到其他位置(会覆盖原有成员),然后返回当前数组. [1, 2, 3, 4, 5].copyWithin(0, 3, 4);/[4, 2, 3, 4, 5]

   -- target(必需):从该位置开始替换数据。

-- start(可选):从该位置开始读取数据,默认为0。如果为负值,表示倒数。

-- end(可选):到该位置前停止读取数据,默认等于数组长度。如果为负值,表示倒数。

  find方法,用于找出第一个符合条件的数组成员。它的参数是一个回调函数. [1, 4, -5, 10].find((n) => n < 0)

  entries(),keys()和values()——用于遍历数组

  includes(): 返回一个布尔值,表示某个数组是否包含给定的值. [1, 2, 3].includes(4);     // false

  

8, 函数的扩展

ES6 允许为函数的参数设置默认值. 有默认值的参数都不是尾参数。这时,无法只省略该参数,而不省略它后面的参数,除非显式输入undefined。

使用参数默认值时,函数不能有同名参数。

rest 参数(形式为“...变量名”):用于获取函数的多余参数,这样就不需要使用arguments对象了

ES6允许使用“箭头”(=>)定义函数。

9, 对象的扩展

Object.is(): 比较两个值是否严格相等,与严格比较运算符(===)的行为基本一致。

Object.assign(): 用于对象的合并,将源对象(source)的所有可枚举属性,复制到目标对象(target)。是浅拷贝,而不是深拷贝.

10, Symbol

   原始数据类型Symbol,表示独一无二的值。var s1 = Symbol('foo');s1.toString() // "Symbol(foo)"

它是JavaScript语言的第七种数据类型,前六种是:Undefined、Null、布尔值(Boolean)、字符串(String)、数值(Number)、对象(Object)。

注意,Symbol函数前不能使用new命令,否则会报错。

可用于消除魔法字符串

Symbol.for():重新使用同一个Symbol值

Symbol.keyFor(): 返回一个已登记的 Symbol 类型值的key。

11, Set 和 Map 数据结构

   Set: 类似于数组,但是成员的值都是唯一的,没有重复的值。

const s = new Set(); [2, 3, 5, 4, 5, 2, 2].forEach(x => s.add(x));  //[2,3,4,5]

keys():返回键名的遍历器. e.g.  for (let item of set.keys())

values():返回键值的遍历器. e.g. for (let item of set.values())

entries():返回键值对的遍历器

forEach():使用回调函数遍历每个成员 set.forEach((value, key) => console.log(value * 2) )

WeakSet的成员只能是对象,而不能是其他类型的值。

WeakSet中的对象都是弱引用,即垃圾回收机制不考虑WeakSet对该对象的引用,也就是说,如果其他对象都不再引用该对象,那么垃圾回收机制会自动回收该对象所占用的内存,不考虑该对象还存在于WeakSet之中

12, Proxy

   Proxy 可以理解成,在目标对象之前架设一层“拦截”,外界对该对象的访问,都必须先通过这层拦截,因此提供了一种机制,可以对外界的访问进行过滤和改写。Proxy 这个词的原意是代理,用在这里表示由它来“代理”某些操作,可以译为“代理器”。

13, Reflect

14, Promise 对象

Promise 是异步编程的一种解决方案,比传统的解决方案——回调函数和事件——更合理和更强大.

Promise也有一些缺点。首先,无法取消Promise,一旦新建它就会立即执行,无法中途取消。

其次,如果不设置回调函数,Promise内部抛出的错误,不会反应到外部。

第三,当处于Pending状态时,无法得知目前进展到哪一个阶段(刚刚开始还是即将完成)。

   Promise.prototype.then():  作用是为Promise实例添加状态改变时的回调函数。

Promise.prototype.catch(): 用于指定发生错误时的回调函数。

Promise.all: 方法用于将多个Promise实例,包装成一个新的Promise实例。

Promise.resolve: 将现有对象转为Promise对象.  var jsPromise = Promise.resolve($.ajax('/whatever.json'));

应用:加载图片

15, Iterator 和 for...of 循环

16, Generator 函数的语法

Generator 函数是 ES6 提供的一种异步编程解决方案。

有两个特征。一是,function关键字与函数名之间有一个星号;二是,函数体内部使用yield语句,定义不同的内部状态(yield在英语里的意思就是“产出”)。

function* helloWorldGenerator() {

 yield 'hello';

 yield 'world';

 return 'ending';

}

var hw = helloWorldGenerator();

hw.next() // { value: 'hello', done: false }

hw.next() // { value: 'world', done: false }

hw.next() // { value: 'ending', done: true }

hw.next() // { value: undefined, done: true }

17, Generator 函数的异步应用

18, async 函数

19, Class

20, Decorator

21, Module 的语法

22, Module 的加载实现

23, 编程风格

24, 读懂规格

25, 二进制数组

26, SIMD

是“Single Instruction/Multiple Data”的缩写,意为“单指令,多数据”。

是 JavaScript 操作 CPU 对应指令的接口,你可以看做这是一种不同的运算执行模式。

SIMD 通常用于矢量运算。

 -->

<!DOCTYPE html>

<html>

    <head>

        <meta charset="UTF-8">

        <title></title>

<!-- <script src="browser.min.js"></script>  <script type="text/babel"></script>-->

<script>

// IE10及以上版本

//IE9可以用npm来安装babel来支持

  const Name = '张三';//使用新增的关键字:const声明常量

 // alert(Name);

 //console.log(Name);

 var a = [];

for (var i = 0; i < 10; i++) {

 a[i] = function () {

console.log(i);

 };

}

a[6]();//6

var tmp = 123;

if (true) {

 tmp = 'abc'; // ReferenceError

// let tmp;  //报错

}

var map = new Map();

map.set('first', 'hello');

for (let [key, value] of map) {

 console.log(key + " is " + value);

}

console.log('字符串的遍历器接口:');

for (let codePoint of 'foo') {

 console.log(codePoint);

}

</script>

    </head>

    <body>

</body>

</html>

猜你喜欢

转载自ldaolong.iteye.com/blog/2367595
ECS
今日推荐