热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

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

一、let与const命令es不存在变量提升1.For循环里面的变量不会泄露2.块级作用域,并且允许在里面声明函数运行,es5是不行的,只能在最顶层声明函数,不能再判断语句等块里面申明函数3

一、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>firstli>

  <li>secondli>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,各种异步操作都可以用同样的方法进行处理。


推荐阅读
  • 使用eclipse创建一个Java项目的步骤
    本文介绍了使用eclipse创建一个Java项目的步骤,包括启动eclipse、选择New Project命令、在对话框中输入项目名称等。同时还介绍了Java Settings对话框中的一些选项,以及如何修改Java程序的输出目录。 ... [详细]
  • C# 7.0 新特性:基于Tuple的“多”返回值方法
    本文介绍了C# 7.0中基于Tuple的“多”返回值方法的使用。通过对C# 6.0及更早版本的做法进行回顾,提出了问题:如何使一个方法可返回多个返回值。然后详细介绍了C# 7.0中使用Tuple的写法,并给出了示例代码。最后,总结了该新特性的优点。 ... [详细]
  • 本文介绍了Java工具类库Hutool,该工具包封装了对文件、流、加密解密、转码、正则、线程、XML等JDK方法的封装,并提供了各种Util工具类。同时,还介绍了Hutool的组件,包括动态代理、布隆过滤、缓存、定时任务等功能。该工具包可以简化Java代码,提高开发效率。 ... [详细]
  • 本文介绍了Redis的基础数据结构string的应用场景,并以面试的形式进行问答讲解,帮助读者更好地理解和应用Redis。同时,描述了一位面试者的心理状态和面试官的行为。 ... [详细]
  • 本文介绍了在Windows环境下如何配置php+apache环境,包括下载php7和apache2.4、安装vc2015运行时环境、启动php7和apache2.4等步骤。希望对需要搭建php7环境的读者有一定的参考价值。摘要长度为169字。 ... [详细]
  • Java学习笔记之面向对象编程(OOP)
    本文介绍了Java学习笔记中的面向对象编程(OOP)内容,包括OOP的三大特性(封装、继承、多态)和五大原则(单一职责原则、开放封闭原则、里式替换原则、依赖倒置原则)。通过学习OOP,可以提高代码复用性、拓展性和安全性。 ... [详细]
  • Go GUIlxn/walk 学习3.菜单栏和工具栏的具体实现
    本文介绍了使用Go语言的GUI库lxn/walk实现菜单栏和工具栏的具体方法,包括消息窗口的产生、文件放置动作响应和提示框的应用。部分代码来自上一篇博客和lxn/walk官方示例。文章提供了学习GUI开发的实际案例和代码示例。 ... [详细]
  • Java中包装类的设计原因以及操作方法
    本文主要介绍了Java中设计包装类的原因以及操作方法。在Java中,除了对象类型,还有八大基本类型,为了将基本类型转换成对象,Java引入了包装类。文章通过介绍包装类的定义和实现,解答了为什么需要包装类的问题,并提供了简单易用的操作方法。通过本文的学习,读者可以更好地理解和应用Java中的包装类。 ... [详细]
  • 海马s5近光灯能否直接更换为H7?
    本文主要介绍了海马s5车型的近光灯是否可以直接更换为H7灯泡,并提供了完整的教程下载地址。此外,还详细讲解了DSP功能函数中的数据拷贝、数据填充和浮点数转换为定点数的相关内容。 ... [详细]
  • 一句话解决高并发的核心原则
    本文介绍了解决高并发的核心原则,即将用户访问请求尽量往前推,避免访问CDN、静态服务器、动态服务器、数据库和存储,从而实现高性能、高并发、高可扩展的网站架构。同时提到了Google的成功案例,以及适用于千万级别PV站和亿级PV网站的架构层次。 ... [详细]
  • 模板引擎StringTemplate的使用方法和特点
    本文介绍了模板引擎StringTemplate的使用方法和特点,包括强制Model和View的分离、Lazy-Evaluation、Recursive enable等。同时,还介绍了StringTemplate语法中的属性和普通字符的使用方法,并提供了向模板填充属性的示例代码。 ... [详细]
  • 解决.net项目中未注册“microsoft.ACE.oledb.12.0”提供程序的方法
    在开发.net项目中,通过microsoft.ACE.oledb读取excel文件信息时,报错“未在本地计算机上注册“microsoft.ACE.oledb.12.0”提供程序”。本文提供了解决这个问题的方法,包括错误描述和代码示例。通过注册提供程序和修改连接字符串,可以成功读取excel文件信息。 ... [详细]
  • 单页面应用 VS 多页面应用的区别和适用场景
    本文主要介绍了单页面应用(SPA)和多页面应用(MPA)的区别和适用场景。单页面应用只有一个主页面,所有内容都包含在主页面中,页面切换快但需要做相关的调优;多页面应用有多个独立的页面,每个页面都要加载相关资源,页面切换慢但适用于对SEO要求较高的应用。文章还提到了两者在资源加载、过渡动画、路由模式和数据传递方面的差异。 ... [详细]
  • 代理模式的详细介绍及应用场景
    代理模式是一种在软件开发中常用的设计模式,通过在客户端和目标对象之间增加一层中间层,让代理对象代替目标对象进行访问,从而简化系统的复杂性。代理模式可以根据不同的使用目的分为远程代理、虚拟代理、Copy-on-Write代理、保护代理、防火墙代理、智能引用代理和Cache代理等几种。本文将详细介绍代理模式的原理和应用场景。 ... [详细]
  • Python中sys模块的功能及用法详解
    本文详细介绍了Python中sys模块的功能及用法,包括对解释器参数和功能的访问、命令行参数列表、字节顺序指示符、编译模块名称等。同时还介绍了sys模块中的新功能和call_tracing函数的用法。推荐学习《Python教程》以深入了解。 ... [详细]
author-avatar
手机用户2502911627_202
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有