ES6学习记录(一)

ECMAScript 6.0(以下简称ES6)是JavaScript语言的下一代标准,已经在2015年6月正式发布。标准的制定者有计划,以后每年发布一次标准,使用年份作为版本。因为ES6的第一个版本是在2015年发布的,所以又称ECMAScript 2015(简称ES2015)。编程语言JavaScript是ECMAScript的实现和扩展,由ECMA(一个类似W3C的标准组织)参与进行标准化。ECMAScript定义了:

ECMAScript标准不定义HTML或CSS的相关功能,也不定义类似DOM(文档对象模型)的Web API,这些都在独立的标准中进行定义。ECMAScript涵盖了各种环境中JS的使用场景,无论是浏览器环境还是类似node.js的非浏览器环境。

for-of循环

在刚刚学习JavaScript的时候,我们通常这样遍历一个数组:

1 for (var i = 0; index < array.length; i++) {
2   console.log(array[i]);
3 }

然后到了ES5正式发布之后,我们可以使用内建的foreach方法来遍历数组:

1 array.forEach(value){
2     console.log(value);
3 }

这样的代码看起来更简洁,也更方便,但却有一个小缺陷:那就是不能使用break语句中断循环,也不能使用return语句返回外层循环。

因此ES6中增加一种新的循环语法来解决目前的问题。

就像这样:

1 for(var value of array){
2     console.log(value);
3 }

这个for-of循环的外表下,还隐藏着一些强大的功能。现在,只需记住:

  • 这是最简洁、最直接的遍历数组元素的语法
  • 这个方法避开了for-in循环的所有缺陷
  • 与forEach()不同的是,它可以正确响应break、continue和return语句

for-in循环用来遍历对象属性。

for-of循环用来遍历数据—例如数组。

但是,不仅如此!

for-of循环也可以遍历其他的集合

for-of循环不仅支持数组,还支持大多数的类数组对象,例如DOM NodeList对象。

for-of循环也支持字符串遍历,它将字符串视为一系列的Unicode字符来进行遍历:

1 for (var chr of "hello") {
2   alert(chr);
3 }

ES6生成器(Generators)

什么是生成器?

先看下面的示例:

1 function* quips(name) {
2   yield "你好 " + name + "!";
3   yield "希望你能喜欢这篇介绍ES6的译文";
4   if (name.startsWith("X")) {
5     yield "你的名字 " + name + "  首字母是X,这很酷!";
6   }
7   yield "我们下次再见!";
8 }

这段代码看起来很像一个函数,我们称之为生成器函数。它与普通函数有很多共同点,但二者有如下区别:

  • 普通函数使用function声明,而生成器函数使用function*声明。
  • 在生成器函数内部,有一种类似return的语法:关键字yield。二者的区别是,普通函数只可以return一次,而生成器函数可以yield多次(当然也可以只yield一次)。在生成器的执行过程中,遇到yield表达式立即暂停,后续可恢复执行状态。

这就是普通函数和生成器函数之间的最大区别,普通函数不能自动暂停,生成器函数可以。

模板字符串

ES6引入了一种新型的字符串字面量语法,我们称之为模板字符串(template strings)。传统的JS,输出模板通常是这样的:

$(‘#result‘).append(
  ‘There are <b>‘ + basket.count + ‘</b> ‘ +
  ‘items in your basket, ‘ +
  ‘<em>‘ + basket.onSale +
  ‘</em> are on sale!‘
);

用ES6模板字符串则可以这样解决:

1 $(‘#result‘).append(`
2   There are <b>${basket.count}</b> items
3    in your basket, <em>${basket.onSale}</em>
4   are on sale!
5 `);

模板字符串是增强版的字符串,用反引号(`)标识,它可以当做普通字符串使用,也可以用来定义多行字符串,或者在字符串中嵌入变量。如果使用模板字符串表示多行字符串,所有的空格和缩进都会被保留在输出之中。

1 $(‘#list‘).html(`
2 <ul>
3   <li>first</li>
4   <li>second</li>
5 </ul>
6 `);

上面代码中,所有模板字符串的空格和换行,都是被保留的,比如<ul>标签前面会有一个换行。如果你不想要这个换行,可以使用trim方法消除它。

1 $(‘#list‘).html(`
2 <ul>
3   <li>first</li>
4   <li>second</li>
5 </ul>
6 `.trim());

模板字符串中嵌入变量,需要将变量名写在${}之中。

 1 function authorize(user, action) {
 2   if (!user.hasPrivilege(action)) {
 3     throw new Error(
 4       // 传统写法为
 5       // ‘User ‘
 6       // + user.name
 7       // + ‘ is not authorized to do ‘
 8       // + action
 9       // + ‘.‘
10       `User ${user.name} is not authorized to do ${action}.`);
11   }
12 }

大括号内部可以放入任意的JavaScript表达式,可以进行运算,以及引用对象属性。

 1 var x = 1;
 2 var y = 2;
 3
 4 `${x} + ${y} = ${x + y}`
 5 // "1 + 2 = 3"
 6
 7 `${x} + ${y * 2} = ${x + y * 2}`
 8 // "1 + 4 = 5"
 9
10 var obj = {x: 1, y: 2};
11 `${obj.x + obj.y}`
12 // 3

模板字符串之中还能调用函数。

1 function fn() {
2   return "Hello World";
3 }
4
5 `foo ${fn()} bar`
6 // foo Hello World bar
时间: 2024-10-12 16:34:13

ES6学习记录(一)的相关文章

es6学习记录

工具Babel,将es6转es5 配置文件名称   .babelrc 内容 { "presets":[], "plugins":[] } npm ES2015 npm install --save-dev babel-preset-es2015 react npm install --save-dev babel-preset-react es7不同阶段语法提案转码4个阶段 npm install --save-dev babel-preset-stage-0 np

JavaScript学习记录day2

JavaScript学习记录day2 学习 javascript JavaScript学习记录day2 1.1 数据类型 1.2 变量 1.1.1 Number 1.1.2 字符串 1.1.3 布尔值 1.1.4 比较运算符 1.1.5 null和undefined 1.1.6 数组 1. 数据类型和变量 1. 数据类型和变量 1.1 数据类型 1.1.1 Number JavaScript不区分整数和浮点数,统一用Number表示,以下都是合法的Number类型: 123; // 整数1230

JavaScript学习记录day5-函数的定义和调用

JavaScript学习记录day5-函数的定义和调用 [TOC] 1. 定义函数 在JavaScript中,定义函数的方式如下: function abs(x) { if (x >= 0) { return x; } else { return -x; } } 上述abs()函数的定义如下: function指出这是一个函数定义:abs是函数的名称:(x)括号内列出函数的参数,多个参数以,分隔:{ ... }之间的代码是函数体,可以包含若干语句,甚至可以没有任何语句.请注意,函数体内部的语句在

JS继续学习记录(一)

JS继续学习记录(一) 总感觉自己的js code写的还算可以,但是又深知好像只知道一些皮毛,所以打算仔细记录一下js晋级学习过程,日日往复 先记录一下自己目前对js的了解吧(20180828) js作为脚本语言,包括核心语法,dom,bom三部分组成. 1.核心语法:变量,函数的定义,一些js内置对象的调用,如array,如json,基本数据类型,引用数据类型若干,各自的用法云云. 2.dom对象:html的页面对象的封装,封装成的dom对象内包括html的基础属性,衍生属性,监听器,绑定函数

Python学习记录-2016-12-17

今日学习记录 模块: import os#导入os模块 import sys#导入sys模块 os.system("df -h")#执行df -h命令 cmd_res = os.popen("df -h").read()#将命令的返回结果赋值给cmd_res,如果不加入.read()会显示命令的返回加过在内存的位置 print(sys.path)#显示系统变量路径,一般个人模块位于site-packages下,系统模块位于lib下 print(sys.argu[2]

Objc基础学习记录5

NSMutableString类继承的NSString类. NSMutableString是动态的字符串. 1.appendingString 方式: 向字符串尾部添加一个字符串. 2.appendingFormat:可以添加多个类型的字符串. int,chat float,double等 3.stringWithString 创建字符串, 4.rangeOfString 返回str1在另一个字符串中的位置. 5.NSMakeRange(0,3) 字符串0位到3位. 6.deleteCharac

Windows API 编程学习记录&lt;二&gt;

恩,开始写Windows API编程第二节吧. 上次介绍了几个关于Windows API编程最基本的概念,但是如果只是看这些概念,估计还是对Windows API不是很了解.这节我们就使用Windows API 让大家来了解下Windows API的用法. 第一个介绍的Windows API 当然是最经典的MessageBox,这个API 的作用就是在电脑上显示一个对话框,我们先来看看这个API的定义吧: int WINAPI MessageBox(HWND hWnd, LPCTSTR lpTe

Windows API 编程学习记录&lt;三&gt;

恩,开始写API编程的第三节,其实马上要考试了,但是不把这节写完,心里总感觉不舒服啊.写完赶紧去复习啊       在前两节中,我们介绍了Windows API 编程的一些基本概念和一个最基本API函数 MessageBox的使用,在这节中,我们就来正式编写一个Windows的窗口程序. 在具体编写代码之前,我们必须先要了解一下API 编写窗口程序具体的三个基本步骤:             1. 注册窗口类:             2.创建窗口:             3.显示窗口: 恩,

Python学习记录day6

Python学习记录day6 学习 python Python学习记录day6 1.反射 2.常用模块 2.1 sys 2.2 os 2.3 hashlib 2.3 re 1.反射 反射:利用字符串的形式去对象(默认)中操作(寻找)成员 cat commons.py #!/usr/bin/env python#_*_coding:utf-8_*_''' * Created on 2016/12/3 21:54. * @author: Chinge_Yang.''' def login(): pr