es6初识笔记(参看阮一峰ECAMscript6入门)

来源:互联网 发布:unity游戏优化 编辑:程序博客网 时间:2024/06/06 02:28

一、letconst命令

 es不存在变量提升

1.For循环里面的变量不会泄露

2.块级作用域,并且允许在里面声明函数运行,es5是不行的,只能在最顶层声明函数,不能再判断语句等块里面申明函数

3.Let相当于var,但也有不同点,const声明的变量不可以在改变,const只能保证这个指针是固定的,至于它指向的数据结构是不是可变的,就完全不能控制了,二者声明的变量都不可以再次声明赋值

4.对于letconst来说,变量不能重新声明,所以一旦赋值的变量以前声明过,就会报错

5.Es6有六种声明变量的方法:letconstimportclass

6.ES6开始,全局变量将逐步与顶层对象的属性脱钩。

var a= 1;window.a // 1

let b= 1;window.b // undefined

 

二、变量的解构赋值

7.变量声明可以用解构赋值,注意左边和右边都采用数组的形式来声明,不然会报错,也可以指定默认值,也适用于对象(左边声明的变量可以多,但是右边赋值不能多余左边变量数,不然会报错)

let [a, [b], d] = [1, [2, 3], 4];

a // 1

b // 2

d // 4

// 报错

let [foo] = 1;

foo// 报错

也可以指定默认值,该处y的默认值为b

let [x, y= 'b'] = ['a']; // x='a', y='b'

let { foo, bar} = { foo: "aaa", bar: "bbb" };

9.解构赋值允许,等号左边的模式之中,不放置任何变量名。因此,可以写出非常古怪的赋值表达式。

({} = [true, false]);

({} = 'abc');

({} = []);

 

10.字符串也可以解构赋值

const [a, b, c, d, e] = 'hello';

a // "h"b // "e"c // "l"d // "l"e // "o"

11.函数的参数也可以使用解构赋值。也可以使用默认值

function add([x, y]){

  return x+ y;}

add([1, 2]); // 3

function move({x= 0, y= 0} = {}) {

  return [x, y];}

move({x: 3, y: 8}); // [3, 8]move({x: 3}); // [3, 0]move({}); // [0, 0]move(); // [0, 0]

12.圆括号问题,解构赋值虽然很方便,但是解析起来并不容易。对于编译器来说,一个式子到底是模式,还是表达式,没有办法从一开始就知道,必须解析到(或解析不到)等号才能知道。ES6的规则是,只要有可能导致解构的歧义,就不得使用圆括号。

以下三种解构赋值不得使用圆括号

(1)变量声明语句中,不能带有圆括号。

(2)函数参数中,模式不能带有圆括号。

(3)赋值语句中,不能将整个模式,或嵌套模式中的一层,放在圆括号之中。

!!!可以使用圆括号的情况只有一种:赋值语句的非模式部分,可以使用圆括号。

13.解构赋值的用途:

 1)交换变量的值

   let x= 1;let y= 2;

   [x, y] = [y, x];

 2从函数返回多个值(数组或者对象都可以返回)

 3函数参数的定义

 4提取JSON数据

letjsonData={
    id:43,
    name:'xiaoli',
    data:[1,2]
};
let {id,name,data:num}=jsonData;
console.log(id,name,num)//43 'xiaoli' [ 1, 2 ]

 

 5)函数参数的默认值

    jQuery.ajax= function (url, {

  async = true,

  beforeSend= function () {},

  cache = true,

  complete= function () {},

  crossDomain= false,

  global= true,

  // ... more config}) {

  // ... do stuff};

  (6)遍历Map结构,任何部署了Iterator接口的对象,都可以用for...of循环遍历

varmap = newMap();
map.set('first','hello');
map.set('second','world');
for(let[key,value] of map){
    console.log(key+'-is-'+value)
}

//first-is-hello

  second-is-world

(7)输入模块的指定方法

 

三、字符串的扩展:

14.字符串的扩展

15.ES6为字符串添加了遍历器接口使得字符串可以被for...of循环遍历。

for (let codePoint of 'foo') {

  console.log(codePoint)}

// "f"// "o"// "o"

16.repeat方法返回一个新字符串,表示将原字符串重复n次。参数如果是小数,会被取整。

'x'.repeat(3) // "xxx"'hello'.repeat(2) // "hellohello"

17模板字符串(template string)是增强版的字符串,用反引号(`)标识。它可以当作普通字符串使用,也可以用来定义多行字符串,或者在字符串中嵌入变量。大括号内部可以放入任意的JavaScript表达式,可以进行运算,以及引用对象属性。

$('#list').html(`<ul>

  <li>first</li>

  <li>second</li></ul>

`.trim());

var x= 1;var y= 2;

 

`${x} + ${y} = ${x+ y}`

// "1 + 2 = 3"

`${x} + ${y* 2} = ${x+ y* 2}`

 

 

四、数组的扩展

18.Array.from方法用于将两类对象转为真正的数组:类似数组的对象(array-like object)和可遍历(iterable)的对象(包括ES6新增的数据结构SetMap)。  伪类数组包括(有长度的对象、arguments、以及那些document.getElementByXXXX获得的数组等)

19.Array.of方法用于将一组值,转换为数组。

Array.of(3, 11, 8) // [3,11,8]

 

五、函数的扩展

  1.函数的参数指定默认值通常情况下,定义了默认值的参数,应该是函数的尾参数

function log(x, y= 'World') {

  console.log(x, y);}

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

function add(...values) {

  let sum= 0;

 

  for (var val of values) {

    sum += val;

  }

 

  return sum;}

add(2, 5, 3) // 10

3.ES6允许使用箭头=>)定义函数。如果箭头函数的代码块部分多于一条语句,就要使用大括号将它们括起来,并且使用return语句返回。由于大括号被解释为代码块,所以如果箭头函数直接返回一个对象,必须在对象外面加上括号。尤其值得注意。函数体内的this对象,就是定义时所在的对象,而不是使用时所在的对象this对象的指向是可变的,但是在箭头函数中,它是固定的。

var f= v=> v;

相当于

var f= function(v) {

  return v;};

//代码块部分多余一条

var sum= (num1, num2) => { return num1+ num2; }

 

4.Object.assign方法用于对象的合并实行的是浅拷贝,而不是深拷贝也就是说,如果源对象某个属性的值是对象,那么目标对象拷贝得到的是这个对象的引用对于这种嵌套的对象,一旦遇到同名属性,Object.assign的处理方法是替换,而不是添加。

 用途:1)为对象添加属性

      2为对象添加方法

      3克隆对象只能克隆原始对象自身的值,不能克隆它继承的值。如果想要保持继承链,可以采用下面的代码

      4合并多个对象

      5为属性指定默认值

5.ES6一共有5种方法可以遍历对象的属性

 For...in Object.keys(obj)Object.getOwnPropertyNames(obj)

 Object.getOwnPropertySymbols(obj)Reflect.ownKeys(obj)

 

六、Promise

七、是异步编程的一种解决方案,比传统的解决方案——回调函数和事件——更合理和更强大。它由社区最早提出和实现单说就是一个容器,里面保存着某个未来才会结束的事件(通常是一个异步操作)的结果。从语法上说,Promise是一个对象,从它可以获取异步操作的消息。Promise提供统一的 API,各种异步操作都可以用同样的方法进行处理。

原创粉丝点击