JavaScript ES6
ECMAScript 2015 是 JavaScript 的第二次重大修订。
ECMAScript 2015 又称为 ES6 和 ECMAScript 6。
本章描述了 ES6 最重要的特性。
ES6 中的新特性
- let 关键字
- const 关键字
- 箭头函数
- 对于/的
- 地图对象
- 设置对象
- 课程
- 承诺
- 象征
- 默认参数
- 函数剩余参数
- 字符串.includes()
- String.startsWith()
- String.endsWith()
- 数组.from()
- 数组键()
- 数组查找()
- 数组 findIndex()
- 新的数学方法
- 新数字属性
- 新的数字方法
- 新的全球方法
- 对象条目
- JavaScript 模块
浏览器对 ES6 的支持(2015)
Safari 10 和 Edge 14 是首批完全支持 ES6 的浏览器:
Chrome 58 | 边缘 14 | Firefox 54 | Safari 10 | 歌剧 55 |
2017 年 1 月 | 2016 年 8 月 | 2017 年 3 月 | 2016 年 7 月 | 2018 年 8 月 |
JavaScript 让
这 let
关键字允许您声明具有块范围的变量。
阅读更多内容 let
在本章中:JavaScript 让.
JavaScript const
这 const
关键字允许您声明一个常量(具有常量值的 JavaScript 变量)。
常量与 let 变量类似,只是其值不能改变。
阅读更多内容 const
在本章中:JavaScript 常量.
箭头函数
箭头函数允许使用简短的语法来编写函数表达式。
你不需要 function
关键字,return
关键字,以及大括号.
箭头函数没有自己的 this
. 它们不太适合定义 对象方法.
箭头函数不会被提升。它们必须被定义 前 它们被使用了。
使用 const
比使用更安全var
,因为函数表达式始终是一个常数值。
您只能省略 return
如果函数是单个语句,则使用关键字和花括号。因此,始终保留它们可能是一个好习惯:
在本章中了解有关箭头函数的更多信息: JavaScript 箭头函数.
For/Of 循环
JavaScript for/of
语句循环遍历可迭代对象的值。
for/of
让您循环遍历可迭代的数据结构,例如数组、字符串、映射、NodeLists 等。
这 for/of
循环具有以下语法:
为了 (多变的 的可迭代) {
// 需要执行的代码块
}
多变的 - 对于每次迭代,下一个属性的值被分配给变量。多变的 可以声明为const
, let
, 或者 var
.
可迭代 - 具有可迭代属性的对象。
循环遍历数组
循环遍历字符串
在本章中了解更多信息: JavaScript 循环 For/In/Of.
JavaScript 地图
能够使用对象作为键是 Map 的一个重要特性。
例子
// 创建对象
const 苹果 = {名称:'苹果'};
const bananas = {名称:'香蕉'};
const oranges = {名称:'Oranges'};
// 创建新地图
const 水果 = new Map();
// 向地图添加新元素
水果.设置(苹果,500);
水果.设置(香蕉,300);
水果.设置(橙子,200);
亲自尝试 »
在本章中了解有关 Map 对象的更多信息: JavaScript 地图.
JavaScript 集
在本章中了解有关 Set 对象的更多信息: JavaScript 集.
JavaScript 类
JavaScript 类是 JavaScript 对象的模板。
使用关键字 class
创建一个类。
总是添加一个名为 constructor()
:
句法
类名称 {
构造函数(){...}
}
例子
汽车类 {
构造函数(名称,年份){
这个.name = 名称;
今年.年 = 年;
}
}
上面的例子创建了一个名为“Car”的类。
该类有两个初始属性:“名称”和“年份”。
JavaScript 类是 不是 一个东西。
它是一个 模板 对于 JavaScript 对象。
使用类
当你有一个类时,你可以使用该类来创建对象:
在本章中了解有关课程的更多信息: JavaScript 类.
JavaScript 承诺
Promise 是一个连接“生成代码”和“使用代码”的 JavaScript 对象。
“生成代码”可能需要一些时间,而“使用代码”必须等待结果。
Promise 语法
const myPromise = new Promise(函数(myResolve,myReject){
// “生成代码”(可能需要一些时间)
myResolve(); // 成功时
myReject(); // 当出现错误时
});
// “消费代码”(必须等待实现的承诺)。
myPromise.then(
函数(值){/*成功时的代码*/},
{"params":["error"],"text":"/* 如果出现错误则显示代码 */"}
);
使用 Promise 的示例
const myPromise = new Promise(函数(myResolve,myReject){
setTimeout(function() { myResolve("我爱你!!"); }, 3000);
});
myPromise.then(函数(值){
document.getElementById("demo").innerHTML = 值;
});
亲自尝试 »
在本章中了解有关 Promises 的更多信息: JavaScript 承诺.
符号类型
JavaScript 符号是一种原始数据类型,就像数字、字符串或布尔值一样。
它代表一个唯一的“隐藏”标识符,其他任何代码都无法意外访问。
例如,如果不同的程序员想要向属于第三方代码的 person 对象添加 person.id 属性,他们可以混合彼此的值。
使用 Symbol() 创建唯一标识符,解决了这个问题:
例子
const 人 = {
名字:“约翰”,
姓氏:“Doe”,
年龄:50岁,
眼睛颜色:“蓝色”
};
让 id = Symbol('id');
人[id] = 140353;
// 现在 person[id] = 140353
// 但 person.id 仍然未定义
亲自尝试 »
符号总是独一无二的。
如果您创建两个具有相同描述的符号,它们将具有不同的值。
符号(“id”)==符号(“id”)//false
默认参数值
ES6 允许函数参数具有默认值。
函数剩余参数
剩余参数 (...) 允许函数将不确定数量的参数视为数组:
例子
函数总和(...参数){
设总和=0;
对于(让 arg 的 args)sum + = arg;
返回总数;
}
设 x = sum(4, 9, 16, 25, 29, 100, 66, 77);
亲自尝试 »
字符串.includes()
这 includes()
方法返回true
如果字符串包含指定值,否则false
:
String.startsWith()
这 startsWith()
方法返回true
如果字符串以指定值开头,否则false
:
String.endsWith()
这 endsWith()
方法返回true
如果字符串以指定值结尾,否则false
:
数组.from()
这 Array.from()
方法从任何具有长度属性的对象或任何可迭代对象返回一个 Array 对象。
数组键()
这 keys()
方法返回一个带有数组键的 Array Iterator 对象。
例子
创建一个数组迭代器对象,包含数组的键:
const 水果 = ["香蕉", "橙子", "苹果", "芒果"];
const 键 = 水果.keys();
让文本=“”;
for(让 x 个键){
文本 += x + "<br> “;
}
亲自尝试 »
数组查找()
这 find()
方法返回通过测试函数的第一个数组元素的值。
此示例查找(返回其值)第一个大于 18 的元素:
例子
const 数字 = [4, 9, 16, 25, 29];
让 first = numbers.find(myFunction);
函数 myFunction(值,索引,数组){
返回值>18;
}
亲自尝试 »
请注意,该函数接受 3 个参数:
- 商品价值
- 项目索引
- 数组本身
数组 findIndex()
这 findIndex()
方法返回通过测试函数的第一个数组元素的索引。
此示例查找第一个大于 18 的元素的索引:
例子
const 数字 = [4, 9, 16, 25, 29];
让 first = numbers.findIndex(myFunction);
函数 myFunction(值,索引,数组){
返回值>18;
}
亲自尝试 »
请注意,该函数接受 3 个参数:
- 商品价值
- 项目索引
- 数组本身
新的数学方法
ES6 向 Math 对象添加了以下方法:
Math.trunc()
Math.sign()
Math.cbrt()
Math.log2()
Math.log10()
Math.trunc() 方法
Math.trunc(x)
返回 x 的整数部分:
例子
Math.trunc(4.9); // 返回 4
Math.trunc(4.7); // 返回 4
Math.trunc(4.4); // 返回 4
Math.trunc(4.2); // 返回 4
Math.trunc(-4.2); // 返回 -4
亲自尝试 »
Math.sign() 方法
Math.sign(x)
如果 x 为负数、空数或正数则返回:
Math.cbrt() 方法
Math.cbrt(x)
返回 x 的立方根:
Math.log2() 方法
Math.log2(x)
返回 x 的以 2 为底的对数:
Math.log10() 方法
Math.log10(x)
返回 x 的以 10 为底的对数:
新数字属性
ES6 向 Number 对象添加了以下属性:
EPSILON
MIN_SAFE_INTEGER
MAX_SAFE_INTEGER
新的数字方法
ES6 为 Number 对象添加了 2 个新方法:
Number.isInteger()
Number.isSafeInteger()
Number.isInteger() 方法
这 Number.isInteger()
方法返回true
如果参数是整数。
Number.isSafeInteger() 方法
安全整数是可以精确表示为双精度数的整数。
这 Number.isSafeInteger()
方法返回true
如果参数是安全整数。
例子
Number.isSafeInteger(10); // 返回 true
Number.isSafeInteger(12345678901234567890); // 返回 false
亲自尝试 »
安全整数是 -(253 - 1) 至 +(253 - 1).
这是安全的:9007199254740991。这并不安全:9007199254740992。
新的全球方法
ES6 增加了 2 个新的全局数字方法:
isFinite()
isNaN()
isFinite() 方法
全球 isFinite()
方法返回false
如果论点是Infinity
或者NaN
.
否则返回 true
:
isNaN() 方法
全球 isNaN()
方法返回true
如果论点是NaN
否则,返回 false
:
对象条目()
例子
创建一个数组迭代器,然后迭代键/值对:
const 水果 = ["香蕉", "橙子", "苹果", "芒果"];
const f = 水果.entries();
对于(让 x 属于 f){
文档.getElementById(“demo”).innerHTML += x;
}
亲自尝试 »
这 entries()
方法返回一个带有键/值对的数组迭代器对象:
0 香蕉
["1,“橙色”"]
["2,“苹果”"]
["3,“芒果”"]
这 entries()
方法不会改变原始数组。
模块
模块以两种不同的方式导入:
了解有关模块的更多信息: JavaScript 模块.